read char



  • ich hab folgendes unterprogramm geschrieben:

    #include <stdio.h>
    #include <string.h>
    int readchar (const char msg[], const char ans1[], const char ans2[])
    {
    int readout, n, m, i, k;
    char zeichen;

    n = strlen(ans1);
    m = strlen(ans2);
    k = 0;

    do {
    printf("%s", msg);
    scanf ("%c", &zeichen);

    if (n == m){
    for (i = 0; i<n; ++i){
    if (zeichen == ans1[i]){
    readout = 1;
    k = 1;
    }
    else if (k == 0)
    if (zeichen == ans2[i]){
    readout = 2;
    k = 1;
    }
    }
    }
    if (k == 0){
    printf("Eingabefehler!\n");
    }
    } while (k != 1);

    return readout;
    }

    main()
    {
    int z;

    z = readchar("Bitte geben sie das Zeichen ein: ", "jJ", "nN");
    printf ("Das Zeichen lautet: %d", z);
    return 0;
    }

    Soweit funktioniert es ja auch, aber wenn ich ein unzulässiges zeichen eingebe passiert folgendes:
    Eingabefehler!
    Bitte geben sie das Zeichen ein: Eingabefehler!
    Bitte geben sie das Zeichen ein:

    Er überspringt einfach einmal die Eingabe und ich weiß leider nicht warum.



  • oh gott... was für ein grausamer aufgeblähter quellcode...
    kannst du mal sagen was du genau machen willst...
    zum anderen ist das bei dir alles c und kein c++... bitte nächstesmal im richtigen forum fragen...



  • Tut mir leid ich wusste nicht, dass er die Rümpfe nicht eingeschoben darstellt.
    Funktioniert das? So ist der code wirklich nicht schön.

    Das Programm soll ein Zeichen einlesen und mit den zulässigen Zeichen, die in ans1 und ans2 gespeichert werden vergleichen und ggf. eine Fehlermeldung ausgeben und die Eingabe wiederholen, wenn das eingelesene Zeichen nicht in ans1 oder ans2 vorhanden ist.



  • kannst dir z.b. einfach erstmal ne funktion schreiben die überprüft ob ein char in einem string(char*) enthalten ist...
    die rufst du dann entsprechend auf

    z.b. so in der art...

    int is_char_in_string(char* s,char c){
    	for(;*s;++s)
    		if(*s==c)
    			return 1;
    return 0;
    }
    
    int main(){ 
    
    	char temp[]="Hallo";
    	char c='H';
    	if(is_char_in_string(temp,c))
    		printf("Ja");
    	else
    		printf("Nein");
    
    }
    


  • Hier der code in ordentlicher form:

    #include <stdio.h>
    #include <string.h>
    int readchar (const char msg[], const char ans1[], const char ans2[])
    {
       int  readout, n, m, i, k;
       char zeichen;
    
       n = strlen(ans1);
       m = strlen(ans2);
       k = 0;
    
       do {
          printf("%s", msg);
          scanf ("%c", &zeichen);
    
          if (n == m){
             for (i = 0; i<n; ++i){
                if (zeichen == ans1[i]){
                   readout = 1;
                   k = 1;
                }
                else if (k == 0)
                   if (zeichen == ans2[i]){
                      readout = 2;
                      k = 1;
                   }
             }
          }
          if (k == 0){
             printf("Eingabefehler!\n");
          }
       } while (k != 1);
    
       return readout;
    }
    


  • danke werd ich gleich mal ausprobieren


Log in to reply