Fehler beim Vergleichen?
lima-city → Forum → Programmiersprachen → C/C++ und D
adresse
ausdruck
ausgeben
block
code
ersten programm
hilfe
identisch code
paar
pause
starten
statement
status
string
system
typ
vergleich
vorgenommen versuchs
-
Hallo,
ich hab das hier geschriben:
#include <stdio.h> #include <stdlib.h> int main(void){ char status[1024]; printf( "Willkommen zu meinem Ersten Programm\n" "\n" "Starten?\n" "Ja =j\n" "Nein=n\n" ); scanf("%s",&status); if (status=="j") { printf( "Ja\n" ); } else{ printf( "Nein\n" ); } system("PAUSE"); return EXIT_SUCCESS; }
Aber ihrgent wie geht der vergleich nicht ? wenn ich j schreibe soll er ja ausgeben und wenn ich n schreibe soll er Nein ausgeben aber der gibt immer n aus
woran leigt das?
HILFE
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Nimm einfache Anführungszeichen.
//statt if (status=="j") { //einfach if (status=='j') {
Einfache Anführungszeichen benutzt du für einzelne char-Werte. Doppelte Anführungszeichen sind für Strings, also char-Arrays.
Folgendes ist identisch:
char foo[] = { 'H', 'a', 'l', 'l', 'o', 0 }; //und char bar[] = "Hallo";
Wobei Strings in C intern immer mit einer 0 beendet werden.
Beitrag zuletzt geändert: 8.9.2009 16:04:50 von bladehunter -
hab mal ein paar Änderungen vorgenommen...
versuchs mal damit
#include <stdio.h> #include <stdlib.h> int main(void){ char status[1024]; printf( "Willkommen zu meinem Ersten Programm\n" "\n" "Starten?\n" "Ja =j\n" "Nein=n\n" ); scanf("%s",&status); int statement=0; for(int i=0;i<1024;i++) { if(status[i]=='j') { statement=1; break; } } if (statement==1) { printf( "Ja\n" ); } else { printf( "Nein\n" ); } system("PAUSE"); return 0; }
dann macht die nutzung des 1024 char arrays auch nen sinn...
EDIT: aber ein einfaches:
if (status[0]=='j')
würde in deinem Fall ausreichen
Beitrag zuletzt geändert: 8.9.2009 16:05:42 von sebulon -
sebulon schrieb: hab mal ein paar Änderungen vorgenommen... versuchs mal damit
dann macht die nutzung des 1024 char arrays auch nen sinn... EDIT: aber ein einfaches: if (status[0]=='j') würde in deinem Fall ausreichen#include <stdio.h> #include <stdlib.h> int main(void){ char status[1024]; printf( "Willkommen zu meinem Ersten Programm\n" "\n" "Starten?\n" "Ja =j\n" "Nein=n\n" ); scanf("%s",&status); int statement=0; for(int i=0;i<1024;i++) { if(status[i]=='j') { statement=1; break; } } if (statement==1) { printf( "Ja\n" ); } else { printf( "Nein\n" ); } system("PAUSE"); return 0; }
DANKE! -
Wenn du allerdings wirklich Strings vergleichen willst, da char status [1024] ja ein 1023-Zeichen-ASCII-String ist, dann musst du mit strcmp vergleichen.
Der Ausdruck
str == "ja"
wird zu 99% gegen false gehen, ungeachtet dessen, was in str drinnen steht. Du vergleichst die Adressen eines Pointers auch char und eines String-literals, das irgendwo im Lo-Mem liegt.
Zum Vergleichen benutze
strcmp (str, "ja") == 0
Bei deinem Programm würde es auch reichen, einfach nur einen Character zu lesen.
#include <stdio.h> #include <stdlib.h> int main () { char status; printf ("Willkommen zu meinem Ersten Programm\n\nStarten?\nJa =j\nNein=n\n"); scanf("%c", &status); printf (status == 'j' ? "Ja\n" : "Nein\n"); system("PAUSE"); return EXIT_SUCCESS; }
Des weiteren ist
printf ("%s", &status)
falsch und gefährlich, weil du dem printf nicht die Adresse des zu befüllenden Speicherblocks übergibst, sondern die Adresse der Adresse des Blocks. Das kann zu (a) unvorhergesehenem Verhalten oder (b) zu segmentation faults führen. Bedenke bei char status [1024], ist der Ausdruck status vom Typ char*, der Ausdruck &status aber vom Typ char**, und status ist dasselbe wie &status [0].
Beitrag zuletzt geändert: 8.9.2009 18:38:21 von census -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage