problem beim eingeben von variablen



  • hey,
    Ich habe folgendes Problem:
    Ich will in einem String ein bestimmtes Zeichen durch ein anderes ersetzen. Jedoch weigert sich mein bisheriges Programm das Zeichen, mit dem das andere ersetzt werden soll einzulesen und überspringt diesen Teil.
    Bin dankbar über Anregungen jeder Art.
    gruß...

    int main()
    {
        char zeichen,zeichen_a,str[]= "Teststring!!!"; 
        int anzahl,i;
    	printf("Gib das zu ersetzende Zeichen ein: ");
        scanf("%c", &zeichen);
        printf("Gib das Zeichen ein, dass eingesetzt werden soll: ");
    	scanf("%c", &zeichen_a);
    
    	anzahl = strlen(str);
        for (i = 0; i < anzahl; ++i)
        {
            if (str[i] == zeichen)
            {
                str[i] = zeichen_a;
            }
        }
        printf("Der String ist jetzt: %s\n", str);
    }
    


  • nach dem die erste char variable eingelesen wurde, bleibt im Eingabebuffer noch
    ein '\n' zurück... beim nächsten einlesen liest scanf() dieses '\n' in die
    nächste variable ein.

    verwende entweder fflush(stdin) (nicht zu empfehlen, führt zu undefiniertem
    verhalten) oder lies mit getche() ein...

    sprich so:

    int main() 
    { 
        char zeichen,zeichen_a,str[]= "Teststring!!!"; 
        int anzahl,i; 
        printf("Gib das zu ersetzende Zeichen ein: "); 
        zeichen=getche(); 
        printf("\nGib das Zeichen ein, dass eingesetzt werden soll: "); 
        zeichen_a=getche(); 
    
        anzahl = strlen(str); 
        for (i = 0; i < anzahl; ++i) 
        { 
            if (str[i] == zeichen) 
            { 
                str[i] = zeichen_a; 
            } 
        } 
        printf("Der String ist jetzt: %s\n", str); 
    
        getch();
    
        return 0;
    }
    


  • #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char zeichen,zeichen_a,str[]= "Teststring!!!";
        int anzahl,i;
        printf("Gib das zu ersetzende Zeichen ein: ");
        scanf("%c", &zeichen);
    
    	// --- Buffer leeren ---
    	while (fgetc(stdin) != '\n');
    
        printf("Gib das Zeichen ein, dass eingesetzt werden soll: ");
        scanf("%c", &zeichen_a);
    
        anzahl = strlen(str);
        for (i = 0; i < anzahl; ++i)
        {
            if (str[i] == zeichen)
            {
                str[i] = zeichen_a;
            }
        }
        printf("Der String ist jetzt: %s\n", str);
    }
    


  • jhkjhk schrieb:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char zeichen,zeichen_a,str[]= "Teststring!!!";
        int anzahl,i;
        printf("Gib das zu ersetzende Zeichen ein: ");
        scanf("%c", &zeichen);
    
    	// --- Buffer leeren ---
    	while (fgetc(stdin) != '\n');
    
        printf("Gib das Zeichen ein, dass eingesetzt werden soll: ");
        scanf("%c", &zeichen_a);
       
        anzahl = strlen(str);
        for (i = 0; i < anzahl; ++i)
        {
            if (str[i] == zeichen)
            {
                str[i] = zeichen_a;
            }
        }
        printf("Der String ist jetzt: %s\n", str);
    }
    

    Beim ersten Mal noch halbwegs richtig, eine Zeile später schon gleich wieder Schrott bzw. masochistisch veranlagt.



  • Wutz schrieb:

    jhkjhk schrieb:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char zeichen,zeichen_a,str[]= "Teststring!!!";
        int anzahl,i;
        printf("Gib das zu ersetzende Zeichen ein: ");
        scanf("%c", &zeichen);
    
    	// --- Buffer leeren ---
    	while (fgetc(stdin) != '\n');
    
        printf("Gib das Zeichen ein, dass eingesetzt werden soll: ");
        scanf("%c", &zeichen_a);
       
        anzahl = strlen(str);
        for (i = 0; i < anzahl; ++i)
        {
            if (str[i] == zeichen)
            {
                str[i] = zeichen_a;
            }
        }
        printf("Der String ist jetzt: %s\n", str);
    }
    

    Beim ersten Mal noch halbwegs richtig, eine Zeile später schon gleich wieder Schrott bzw. masochistisch veranlagt.

    hmm... läuft doch!



  • lucky_ich schrieb:

    hmm... läuft doch!

    Typische Anfängernaivität.



  • Wutz schrieb:

    lucky_ich schrieb:

    hmm... läuft doch!

    Typische Anfängernaivität.

    Wo liegt der Fehler begründet? Das wäre weitaus konstruktiver und vorallem lehrreicher.



  • Wäre z.B. folgendes besser?

    void clearBuf()
    {
    	char c;
    
    	while ((c = getchar()) != EOF)
    	{
    		if (c == '\n')
    		{
    			break;
    		}
    	}
    }
    

Anmelden zum Antworten