kostenloser Webspace werbefrei: lima-city


Fehler beim Vergleichen?

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    chatvz

    Kostenloser Webspace von chatvz

    chatvz hat kostenlosen Webspace.

    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

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. 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
  5. Autor dieses Themas

    chatvz

    Kostenloser Webspace von chatvz

    chatvz hat kostenlosen Webspace.

    sebulon schrieb: hab mal ein paar Änderungen vorgenommen... versuchs mal damit
    #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main(void){ char status[1024]; printf( "Willkommen zu meinem Ersten Programm\n" "\n" "Starten?\n" "Ja =j\n" "Nein=n\n" ); scanf("%s",&amp;status); int statement=0; for(int i=0;i&lt;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

    DANKE!
  6. c****s

    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
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!