C-Programm Hilfe (Array/Funktionen)
-
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]);