C-Programm Hilfe (Array/Funktionen)



  • Hi, ich muss folgendes Programm erstellen, komme jedoch wegen einer Fehlermeldung nicht weiter:

    Das Programm hat am Anfang ein Auswahlmenü. Derzeitig bin ich bei A. Dort muss ich dann in einer Funktion einen Schüler eingeben und dann nach ihm suchen. Falls er nicht vorhanden ist soll eine Meldung ausgegeben werden, dass der Schüler nicht in der Liste vorhanden ist. Wenn das Programm jedoch den Schüler findet, soll man 5 Noten eingeben. Diese Noten werden dann wieder an das Hauptprogramm zurückgeschickt.

    Derzeitig bin ich noch bei dem "Schüler suchen", jedoch wie schon gesagt, komme ich nicht mehr weiter bzw. kann die nächste Aufgabe nicht machen.

    Hier der Quellcode:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <conio.h>
    
    void auswahl();
    void fehler();
    int erfassen(char[]);
    
    int main()
    {
        char name[5][21]={"Namea","Nameb","Namec","Named","Namee"};
        char ch=' ';
    	while(ch!='x'&&ch!='X')
    	{
    		auswahl();
    		fflush(stdin);
    		scanf("%c",&ch);
    		switch(ch)
    		{
    			case 'a':case 'A':
    				    printf("\n\ncasea");
                        getch();
    					 	break;
                case 'b':case 'B':
    				    printf("\n\ncaseb");
                        getch();
    					 	break;
                case 'c':case 'C':
                        getch();
    					 	break;
    			case 'x':case 'X': 	break;
    			default          : 		fehler();
    						 break;
    		}
    	}
      return 0;
    
    }
    
    void auswahl()
    {
    	system("CLS");
    
    	printf("\t\tNotenerfassung\n");
    	printf("\t\t==============\n\n");
    	printf("\tA\tNoten erfassen\n");
        	printf("\tB\tNoten anzeigen\n");
        	printf("\tC\tAuswertung\n");
    	printf("\tX\tEnde\n");
    
    	printf("\n\tIhre Auswahl: ");
    }
    
    int erfassen(char name[])
    {
        int i,erg;
        char suchname[21];
    
        scanf("%s",suchname);
    
        for(i=0;0<5;i++)
        {
            erg=strcmp(suchname,name[i]);
            if(!erg==0)
            printf("nichts gefunden");
            else
            printf("gefunden");
            break;
        }
    }
    
    void fehler()
    {
    	printf("\t\tFehlerhafte Auswahl");
    	getch();
    }
    


  • Wenn du die Fehlermeldung über die du stolperst auch noch benennen würdest, könnte dir vielleicht auch geholfen werden.



  • bung16.c||In function 'erfassen':|
    bung16.c|66|warning: passing argument 2 of 'strcmp' makes pointer from integer without a cast|
    expected 'const char *' but argument is of type 'char'|
    


  • Die Funktion erfassen muss einen Zeiger auf Strings erhalten, also z.B.

    int erfassen(char**name)
    


  • alles klar, jetzt klappt es

    nur hab ich jetzt nur noch das Problem, dass das Programm die Schleife nicht richtig benutzt

    d.h. wenn ich beim Suchen: Namea eingebe findet er ihn gleich, wenn ich jedoch z.B. Nameb eingebe sagt er mir, dass er nichts gefunden hat.

    für die Variable name hab ich in int main() folgendes benutzt:

    char*name[5][21]={"Namea","Nameb","Namec","Named","Namee"};
    

    das hier ist die Schleife (in int erfassen(char**name))

    int i,erg;
        char suchname[21];
    
        printf("Schülername eingeben: ");
        scanf("%s",suchname);
    
        for(i=0;i<5;i++)
        {
            erg=strcmp(suchname,name[i]);
            if(!erg==0)
            printf("nichts gefunden");
            else
            printf("gefunden");
            break;
        }
    


  • Die Schleife ist komplett falsch, besser:

    for(i=0;i<5;i++)
        {
            erg=strcmp(suchname,name[i]);
            if( erg!=0 )
            printf("nichts gefunden");
            else {
            printf("gefunden");
            break; }
        }
    


  • Klappt leider noch immer nicht richtig

    wenn ich "Namea" eingebe erscheint:

    gefunden

    wenn ich "Nameb" eingebe erscheint:

    nichts gefundengefunden

    wenn ich "Namec" eingebe erscheint:

    nichts gefundennichts gefundengefunden

    wenn ich "Named" eingebe erscheint:

    nichts gefundennichts gefundennichts gefundengefunden

    wenn ich "test" eingebe erscheint:

    nichts gefundennichts gefundennichts gefundennichts gefundennichts gefunden



  • Mann Mann, ein bisschen Eigeninitiative bitte.
    Die Schleife macht genau dass, was du programmiert hast, nämlich von 0..4 zu laufen und bei Nichtübereinstimmung was auszugeben und bei Übereinstimmung was auszugeben UND abzubrechen. Wenn du ein anderes Verhalten haben willst, musst du das eben programmieren.



  • Facepalm 🙄



  • Facepalm schrieb:

    Facepalm 🙄

    ...und zwar sowas von!

    bin gerade einfach voll auf der palme... derzeitiges denkvermögen: 0...

    habs wenigstens jetzt geschafft (auch wenns für den ein oder anderen eine dumme schleife ist :P)

    for(i=0;i<5;i++)
        {
            erg=strcmp(suchname,name[i]);
            if( erg!=0 )
            continue;
            else {
            printf("gefunden");
            break; }
        }
        if(erg!=0)
        printf("nicht gefunden");
    


  • Kann man gelten lassen, wenn erg vor der Schleife initialisiert wird.



  • Da du denn if-Zweig eh nicht brauchst, musst du die Bedingung negieren.

    for(i=0; i<5; i++)
        {
          erg = strcmp(suchname,name[i]);
          if (erg == 0)
          {
            printf("gefunden");
            break;
          }
        }
        if(erg != 0)
          printf("nicht gefunden");
    

    Wutz schrieb:

    Kann man gelten lassen, wenn erg vor der Schleife initialisiert wird.

    Er geht doch aber sicher in die Schleife rein (bei i = 0).
    Da wird doch erg ein Wert zugewiesen



  • for(i=0;i<5;++i)
        {
            if(!strcmp(suchname,name[i]))
                break;
        }
        if(i==5)
            printf("nicht gefunden");
        else
            printf("gefunden: %s", name[i]);
    

Anmelden zum Antworten