ansi C , fragen zu funktionen und abläufen



  • hallo, ich bin relativ neu auf dem gebiet "C". daher muss ich euch mal eine frage stellen und ich hoffe ihr könnt mir da helfen.

    folgendes:

    ich möchte gerne einen prototypen schreiben der zeichen vom typ char einliest, eine fehlerbehandlung macht und einen funktionswert z.b. 1 oder 2 (für die auswahl) zurückgibt.
    die gültigen zeichen sollen in zwei arrays gespeichert werden (ans1 & ans2) und das eingelsene zeichen muss dann mit diesen verglichen werden.

    es ist eine aufgabe und ich habe nur die befehle zur verfügung die ich im folgenden quelltext verwendet habe. ich hoffe ihr könnt mir da weiterhelfen und sagen warum das noch nicht funktioniert.
    für euch wahrscheinlich eine recht primitive frage, aber wie gesagt.. ich bin neu auf dem gebiet (habe jetzt nichts eingerückt, da ich das mit copy & paste hier reinkopiert habe.. entschuldigt das.).
    der quelltext:

    /* DER QUELLTEXT*/
    #include <stdio.h>
    #include <string.h>
    
    int readchar (const char msg[], const char ans1[], const char ans2[])
    {
    int readOut, i, k, len1, len2, ok;
    char readIn;
    len1 = strlen(ans1);
    len2 = strlen(ans2);
    ok = 1;
    readOut = 0;
    do{
       printf("%s", msg);
       scanf("%c",&readIn);
          for (i=0; i <= len1; ++i){
             if (readIn == ans1[i]){
             readOut = 1;
             }
          }
       for (k=0; k <= len2; ++k){
          if (readIn == ans2[k]){
             readOut = 2;
          }
       }
    
       if (readOut != 1 && readOut != 2){
          printf("Eingabefehler!!!\n\n");
       }
      }while(readOut != 1 && readOut != 2);
    return readOut;
    }
    main()
    {
       int out;
       out = readchar("\nBitte geben Sie das Zeichen ein :","jJ","nN");
       return 0;
    }
    


  • Was genau funktioniert denn am Programm nicht?



  • Bitte benutze CPP Tags, editiere dein Post, sonst ist es unübersichtlich.



  • die schleifenstruktur haut denke ich noch nicht hin, denn er gibts z.b. die konstante "msg" zweimal hintereinander aus wenn ein "gültiges" zeichen eigegeben wurde und wenn ein ungültiges eingegeben wurde gibt er auf dem bildschirm die konstante "msg" und dahinter zweimal "Einagbefehler!!!" aus.
    geht das mit den schleifen vielleicht irgendwie eleganter?
    danke schonmal im voraus..



  • Sowie ichs aus deinem Code entnehmen konnte wolltest du die Eingabe checken,
    ob das richtige Zeichen eingegeben wurde oder nicht.
    Wozu der ganze Aufwand???mit den Schleifen und so?
    Es würde doch auch so gehen:

    #include <stdio.h> 
    
    int readchar();				
    
    int main(char argv,int *argc)
    {
    	int out;
        out=readchar();
    	return(0);
    }
    
    int readchar()
    {
    	char eingabe;
    
    	for(;;)  //solange bis J, j, N, oder n eingegeben wurde!(abbruch mit break;)
    	{
    		fflush(stdin);	   //leert die Zeichen im Eingabepuffer							
    		printf("Bitte geben Sie das Zeichen ein: ");
    		eingabe=getchar();
    		if(eingabe=='J'||eingabe=='j')   
    		{
    			printf("\n%c Richtige Eingabe!",eingabe);
    			return(1);     //gibt den Rückgabewert 1 bei J o. j zurück
    			break;
    		}
    		else if(eingabe=='N'||eingabe=='n')
    		{
    			printf("\n%c Richtige Eingabe!",eingabe);
    			return(2);	  //gibt den Rückgabewert 2 bei N o. n zurück
    			break;
    		}
    		else
    		{
    			printf("\nFalsche Eingabe!\n\n");
    		}
    	}
    	return(0);
    }
    


  • das problem ist, das programm soll universal einsetzbar sein. also mit jederlei "gültigen" und "ungültigen" zeichen, die je nach bedarf in den arrays ans1 und ans2 gespeichert sind, ausführbar sein.
    und wie gesagt, ich habe als konvention bekommen, dass ich nur die o. a. befehle nutzen darf..


Anmelden zum Antworten