programm gibt immer else fall zurück und nicht den if fall



  • #include <iostream>
    using namespace std;

    int pruefeZustand(char zeichen)
    {
    int z;
    char zahlen[11]="0123456789";
    for(int j=0; j<10; j++)
    {
    if (zeichen==zahlen[j])
    {
    z=1;
    }

    }
    return z;
    }

    int main()
    {
    char zeichen;
    zeichen = 2;
    if(pruefeZustand(zeichen)==1)
    {
    cout << 'n' << endl;
    }
    else
    {
    cout << 'o' << endl;

    }
    }

    Wenn das Zeichen enthalten ist, dann setzt du z auf 1. Und wenn nicht? Dann hat es einen undefinierten Wert. Du solltest z mit 0 initialisieren.

    Dann funktionierts leider immer noch nicht. es wird immer noch ein o zurückgegeben. 😞



  • Benutz die Code-Tags!

    [ code ] ... [ /code ]

    Du setzt den Wert von Zeichen auf 2. Dezimal 2. Nicht das Zeichen '2'. In deiner Schleife prüfst du aber auf die Zeichen.



  • Nein, benutz besser die C++-Tags.

    ...
    


  • ehrlich gesagt verstehe ich leider nicht was du meinst. 😞 und diese code-tags habe ich noch nie gesehen. ich stehe erst am anfang meiner c++-kenntnisse. leider. 😞



  • Das Zeichen '2' hat den dezimalen ASCII Wert 50.
    Also entweder du weißt der Variable Zeichen den Wert 50 zu, oder das Zeichen '2'. Achte auf die einzelnen Hochkommas.

    2 <-- Zahl (integer).
    '2' <-- Zeichen (character).



  • Saralii schrieb:

    und diese code-tags habe ich noch nie gesehen. ich stehe erst am anfang meiner c++-kenntnisse. leider. 😞

    Hat nichts mit C++ zu tun, sondern mit der Formatierung deiner Quelltexte hier im Forum. Wenn du an den Anfang eines Codes [cpp] und an das Ende [/cpp] schreibst, wird dieser schön formatiert. Die erste weisse Schaltfläche "C/C++" direkt unter den Smileys kann dir dabei helfen.

    Zum Beispiel:

    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World" << std::endl;
    }
    


  • ok, verstanden. 🙂 vielen dank.
    das grundproblem ist eigentich folgendes:
    ich lese aus einer datei einzelne zeichen ein. falls eines dieser zeichen eine zahl (0 bis 9) ist, möchte ich dass mir eine funktion den wert 1 zurückgibt. ich könnte es so wie oben lösen, wenn ich wüsste wie ich die entsprechenden ascii-codes in einem array zum vergleichen speicher.

    int pruefeZustand(char zeichen)
    {
     int z=0;
     char zahlen[11]="0123456789";
     for(int j=0; j<10; j++)
     {
      if (zeichen==zahlen[j]) 
      {
       z=1;
      }
    
     }
     return z;
    }
    

    jetzt meine frage: wie schreibe ich den ascii-code von den zahlen 0-9 in das array, damit der vergleich funktioniert?



  • Deine Funktion ist vollkommen ok so (wenn auch etwas unhübsch ;)). In deinem Array speicherst du die Zeichen für alle Ziffern (nicht die ASCII Werte), was auch gut so ist. Schließlich willst du Zeichen vergleichen.

    Du musst eben nur darauf achten, dass du auch wirklich die richtigen Zeichen der Funktion übergibst.



  • das problem ist, es werden aus einer datei zeichen und zahlen eingelesen.

    char zeichen; 
    datei.get(zeichen);
    

    diese werden nacheinander von der funktion "prüfe zustand" geprüft,

    int pruefeZustand(char zeichen)
    {
     int z;
     char zahlen[11]="0123456789";
     for(int j=0; j<10; j++)
     {
      if (zeichen==zahlen[j]) 
      {
       z=1;
      }
      else
      {z=0;}
    }
     return z;
    }
    

    Die Funktion soll 1 zurückliefern, wenn es sich bei dem eingelesenen zeichen um eine zahl handelt.



  • Zahl oder Ziffer? 😉 Du meinst wohl Ziffer. Und dann ist alles vollkommen richtig.



  • VIELEN LIEBEN DANK! ich probiere noch ein bißchen rum, und wenn weitere fragen auftauchen, dann melde ich mich hier nochmal. hihi. 👍 😃



  • #include <iostream>
    
    using namespace std; 
    
    int pruefeZustand(char zeichen) 
    { 
    	int z=0; 
    	char zahlen[11]="0123456789"; 
    	for(int j=0; j<10; j++) 
    	{ 
    		if (zeichen==zahlen[j]) 
    		{ 
    			z=1; 
    		} 
    	} 
    return z; 
    } 
    
    int main() 
    { 
    	char zeichen; 
    	zeichen = '2';//<<<---- 
    	if(pruefeZustand(zeichen)==1) 
    	{ 
    	    cout << 'n' << endl; 
    	} 
    	else 
    	{ 
    	    cout << 'o' << endl; 
    	} 
    }
    


  • @Doug_HH

    ich find dein bsp doof...
    die fkt prufezustand sagt weder etwas über die interpretation des rückgabe-werts aus, noch ist ein int dort sinnvoll

    wie auch schon erwähnt: es sollte nicht "zahlen" sondern ziffern heißen... zahlen[11]: wofür brauchst du die nullterminierung hier? ich glaube, du brauchst sie nicht : P

    bb

    PS:
    übrigens bietet die standard-lib hier eine fertige funktion std::isdigit aus dem header locale



  • unskilled schrieb:

    @Doug_HH

    ich find dein bsp doof...
    die fkt prufezustand sagt weder etwas über die interpretation des rückgabe-werts aus, noch ist ein int dort sinnvoll

    Ist ja nun nicht mein Beispiel...

    Siehe erster Post...


Anmelden zum Antworten