Frage zu strings!



  • Erstens: Nimm lieber fgets(), damit kannst du auch kontrollieren, wieviel maximal eingelesen wird.

    Zweitens: man: toupper macht bestimmt nicht das, was du vorhast.

    Drittens: Anstelle der vielen if() würde ich ja ein switch() hinsetzen.

    Viertens: Was sagt dein Debugger? Du könntest ein leichtes Problem damit bekommen, daß i nicht initialisiert wird (und daß Array-Indizes von 0 bis n-1 gerechnet werden).



  • CStoll schrieb:

    Erstens: Nimm lieber fgets(), damit kannst du auch kontrollieren, wieviel maximal eingelesen wird.

    OK! werde ich machen!

    CStoll schrieb:

    Zweitens: man: toupper macht bestimmt nicht das, was du vorhast.

    Da bin ich auch grade draufgekommen

    CStoll schrieb:

    Drittens: Anstelle der vielen if() würde ich ja ein switch() hinsetzen.

    switch hab ich mir ncoh ncith angesehn deshalb die vielen if's werde mir die funktion aber gleich reinziehn!

    CStoll schrieb:

    Viertens: Was sagt dein Debugger? Du könntest ein leichtes Problem damit bekommen, daß i nicht initialisiert wird (und daß Array-Indizes von 0 bis n-1 gerechnet werden).

    Debugger sagt nichts



  • toupper funzt ned! Compiler sagt nichts hier noch mal der code:

    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<ctype.h>
    
    char string[100]; //zum einlesen des wortes
    int i=0;
    
    int main(){
       printf("Bitte geben sie ein Wort ein (nicht groeser als 100 Buchstaben) ==>"); 
       fgets(string, 100, stdin);
       zeichen_lesen();
    }
    int  zeichen_lesen(){
       char zeichen = string[i];
       int toupper(int zeichen);
       printf("%c", zeichen);
       getch();
       }
       switch (zeichen){
          case 'A':A_ausgabe();
          case 'B':B_ausgabe();
          case 'C':C_ausgabe();
          case 'D':D_ausgabe();
    //usw...
    


  • Ja klar - du hast ja auch nur eine lokale Funktion mit diesem Namen deklariert. Anwenden könntest du das z.B. so:

    for(int i=0;string[i]!='\0';++i)//kompakter als deine while()-Version)
    {
      char zeichen = toupper(string[i]);
      switch(zeichen)
      {
      case 'A': A_Ausgabe();break;//die break's sind wichtig
      case 'B': B_Ausgabe();break;
      ...
      default : keine_Ausgabe();break;
      }
    }
    


  • JOP! ES FUNKTIONIERT JETZT MUSS ICH NUR MEHR DIE BUCHSTABEN GESTALTEN!^^ hab die for schleife allerdings weggeslassen die brauche ich ned ! 😃
    DANKE!!!!!!!!!!!!

    hier jetzt der fertige Code:

    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<ctype.h>
    
    char string[100]; //zum einlesen des wortes
    int i=0;
    
    int main(){
       printf("Bitte geben sie ein Wort ein (nicht groeser als 100 Buchstaben) ==>"); 
       fgets(string, 100, stdin);
       zeichen_lesen();
    }
    int  zeichen_lesen(){
       char zeichen;
       zeichen = toupper(string[i]);
    
       switch (zeichen){
          case 'A':A_ausgabe();break;
          case 'B':B_ausgabe();break;
          case 'C':C_ausgabe();break;
          case 'D':D_ausgabe();break;
          case 'E':E_ausgabe();break;
          case 'F':F_ausgabe();break;
          case 'G':G_ausgabe();break;
          case 'H':H_ausgabe();break;
          case 'I':I_ausgabe();break;
          case 'J':J_ausgabe();break;
          case 'K':K_ausgabe();break;
          case 'L':L_ausgabe();break;
          case 'M':M_ausgabe();break;
          case 'N':N_ausgabe();break;
          case 'O':O_ausgabe();break;
          case 'P':P_ausgabe();break;
          case 'Q':Q_ausgabe();break;
          case 'R':R_ausgabe();break;
          case 'S':S_ausgabe();break;
          case 'T':T_ausgabe();break;
          case 'U':U_ausgabe();break;
          case 'V':V_ausgabe();break;
          case 'W':W_ausgabe();break;
          case 'X':X_ausgabe();break;
          case 'Y':Y_ausgabe();break;
          case 'Z':Z_ausgabe();break;
       }
    }
    int A_ausgabe(){
       char stringA[]="AAAAAAAAAAA";
       char A[11];
    
       i++;   
       zeichen_lesen();
    // geht noch weiter mit den funktionen
    


  • Gimmli schrieb:

    hab die for schleife allerdings weggeslassen die brauche ich ned ! 😃

    Wieso das? Die ist auf jeden Fall besser als deine Rekursion.



  • 'for' loop initial declaration used outside C99 mode

    spukt mir der compiler mit der schleife aus! 😕



  • Du darfst nach dem alten Standards (C89 bzw. C90) Variablen nicht innerhalb der Schleife deklarieren. Das geht nur im aktuellen Standard C99.

    // Variante in C89/90
    void func(void){
        int i;
        // ...
        for(i=0; i<foo; i++){
            // ...
        }
    }
    
    // Variante in C99
    void func(void){
        // ...
        for(int i=0; i<foo; i++){
            // ...
        }
    }
    

    (selbstverständlich ist die C89-Variante auch in C99 gültig)

    Zur Lösung des Problems kannst du entweder den Code so umbauen, dass er der C89-Variante genügt, oder deinen Compiler in den C99-Modus schalten (C99 unterstützt er wohl, sonst sähe die Warnung ja anders aus). Beim gcc/MinGW geht das z.B. mit -std=c99.



  • hmmm.... schleife funktioniert noch immer nicht 😞

    ich benutze Dev-Cpp wo soll ich das auf C99 umstellen?!?!

    Hier nochmal der code so wie ich ihn jetzt habe(noch mit while schleife):

    //..
    int  zeichen_lesen(){
       char zeichen;
    
       while(i<=100){
    
          zeichen = toupper(string[i]);
    
          i++;
          switch (zeichen){
                case 'A':A_ausgabe();break;
                case 'B':B_ausgabe();break;
                case 'C':C_ausgabe();break;
                case 'D':D_ausgabe();break;
                case 'E':E_ausgabe();break;
                case 'F':F_ausgabe();break;
                case 'G':G_ausgabe();break;
    //..
    

    auserdem bekomme ich diesen fehler:

    [Warning] implicit declaration of function `A_ausgabe'
    [Warning] implicit declaration of function `B_ausgabe'
    ...
    

    PROGRAMM FUNZT JETZT VOLL!!!! zwar mit while schleife aber ja .... so ist es jetzt einsatz bereit1 DANKE FÜR EURE HILFE!!!!!!!!!!



  • Vielleicht solltest du die Funktionen A_ausgabe() etc mal vor der main() deklarieren (Stichwort: Prototyp), dann muß der Compiler nicht raten, womit er es zu tun hat.


Anmelden zum Antworten