Programm funktioniert nicht ganz so toll



  • Hi zusammen,

    ich hab zur Übung für die Schule ein Programm geschrieben, dass wenn man eine Satz eingiebt mit ! oder ?. Wenn ein ! vorkommt dann soll es in ein ? umgewandelt werden und umgekehrt.

    Aber das Problem ist, dass wenn ich z.B. Hallo eingeben dann wandelt es !!!! in
    ???? um bzw. umgekehrt.

    Bitte gebt Tipps und sagt mir was ich Falsch gemacht habe.
    Danke im vorraus.:)

    Hier das Programm:

    #include <stdio.h>
    #define MAX_STRLEN 100
    
    void converta(char zeichen[]);
    void convertb(char zeichen[]);
    
    void converta(char zeichen[])
    {
      int z=0;
    
      while(zeichen[z] != '\0')
      {
        if(zeichen[z] = '!')
        {
        zeichen[z] = '?';
        }
    	z++;
      }
    
    }
    
    void convertb(char zeichen[])
    {
      int z=0;
    
      while(zeichen[z] != '\0')
      {
        if(zeichen[z] = '?')
        {
          zeichen[z] = '!';
        }
    	z++;
      }
    }
    
    int main()
    {
      char zeichen[MAX_STRLEN];
    
      printf("Geben Sie bitte einen Satz ein!\n");
      printf("Eingabe:\n");
      gets(zeichen);
      fflush(stdin);
    
      converta(zeichen);
      printf("Der umgewandelte Satz lautet:%s\n",zeichen);
      convertb(zeichen);
      printf("Der umgewandelte Satz lautet:%s\n",zeichen);
    
      return (0);
    }
    

    MfG C_Boy



  • Vergleichs- und Zuweisungsoperator verwechselt (nicht gekannt?), typischer Anfängerfehler.
    Versuche mal

    if(zeichen[z] == '?')
    if(zeichen[z] == '!')
    


  • Zwischen == und = ist ein himmelweiter Unterschied. Schaue dir deine if-Abfragen nochmal an!



  • Wohl wahr ein Anfängerfehler.
    Ich danke euch.
    Aber irgendein Fehler versteckt sich noch im Programm.
    Wenn ich jetzt das Programm starte ohne Debugging und ich geben "Hallo?" ein dann wird es in "Hallo!" umgewandelt. Bis jetzt noch alles gut, aber dann wenn man z.B. "Hallo!" eingibt dann wird es nicht in "Hallo?" umgewandelt sondern es bleibt "Hallo!".

    Danke.



  • C_Boy schrieb:

    wenn man z.B. "Hallo!" eingibt dann wird es nicht in "Hallo?" umgewandelt sondern es bleibt "Hallo!".

    Du ersetzt in convertb jedes Fragezeichen durch ein Ausrufezeichen.



  • Ich hab jetzt converta mit convertb vertauscht.

    convertb(zeichen);									  
      printf("Der umgewandelte Satz lautet:%s\n",zeichen);
      converta(zeichen);
      printf("Der umgewandelte Satz lautet:%s\n",zeichen);
    
      return (0);
    }
    

    Alles andere ist gleich geblieben.
    Aber wenn man ?? eingibt dann wandelt es um in !! und dann in ??.
    Bei der Eingabe von !! bleibt es !! und dann wirds ??.

    Bei der Eingabe von ?? das finde ich komisch das es nicht so abläuft wie bei der Eingabe von !!.

    Kann man das nicht anders bzw. Einfacher lösen?



  • C_Boy schrieb:

    Ich hab jetzt converta mit convertb vertauscht.

    ...

    Alles andere ist gleich geblieben.
    Aber wenn man ?? eingibt dann wandelt es um in !! und dann in ??.
    Bei der Eingabe von !! bleibt es !! und dann wirds ??.

    Bei der Eingabe von ?? das finde ich komisch das es nicht so abläuft wie bei der Eingabe von !!.

    Kann man das nicht anders bzw. Einfacher lösen?

    Ist doch klar!
    Du sagst doch wandle alle ? in !. Und wenn kein ? drin vorkommt bleibt es bei dem Text.

    So kannst du beliebige Zeichen tauschen:

    void convert(char zeichen[], char z1, char z2)
    {
      int z=0;
    
      while(zeichen[z] != '\0')
      {
        if(zeichen[z] == z1)
        {
          zeichen[z] = z2;
        } 
        else if(zeichen[z] == z2)
        {
          zeichen[z] = z1;
        }
    
        z++;
      }
    } 
    
    ....
    // Aufruf mit 
    convert(zeichen, '?', '!');
    

Anmelden zum Antworten