[Anfänger] atoi() ergibt immer 0



  • Firrebird1 schrieb:

    Ich bin jetzt davon ausgegangen, dass atoi den String "g" ´zum Beispiel in den Wert 103 passend zur ASCII-Tabelle umwandelt.

    Weißt du denn jetzt, wie man das macht?



  • DirkB schrieb:

    Weißt du denn jetzt, wie man das macht?

    Man könnte das doch durch einen TypeCast (so nennt sich das glaub ich) erreichen.

    Das sähe dann doch so aus, oder:

    char c='A';
    int i=(int)c;
    

  • Mod

    Hast du mal versucht, was ohne den Cast passiert?



  • SeppJ schrieb:

    Hast du mal versucht, was ohne den Cast passiert?

    ... Der gleiche Fehler, den ich vorher hatte? Oder worauf willst du hinaus?


  • Mod

    Firebird1 schrieb:

    SeppJ schrieb:

    Hast du mal versucht, was ohne den Cast passiert?

    ... Der gleiche Fehler, den ich vorher hatte? Oder worauf willst du hinaus?

    Also hast du es nicht versucht.



  • SeppJ schrieb:

    Firebird1 schrieb:

    SeppJ schrieb:

    Hast du mal versucht, was ohne den Cast passiert?

    ... Der gleiche Fehler, den ich vorher hatte? Oder worauf willst du hinaus?

    Also hast du es nicht versucht.

    #include <stdio.h>
    
    main()
    {
     	  int i;
     	  char c="g";
     	  i=c;
     	  printf("%i",i);
    }
    

    Nun, doch, dann bekomme ich wieder das Ergebnis 0. Das Fragezeichen richtete sich eher danach, ob Du darauf hinaus wolltest oder etwas anderes als Ergebnis geschehen sollte...



  • char c='g'; // kein string, sondern ein Zeichen (beachte ')
    


  • dddrdr schrieb:

    char c='g'; // kein string, sondern ein Zeichen (beachte ')
    

    Hoppla, das passiert, wenn man nicht aufpasst. Na dann kommt auch das richtige Ergebnis raus.


  • Mod

    Firebird1 schrieb:

    dddrdr schrieb:

    char c='g'; // kein string, sondern ein Zeichen (beachte ')
    

    Hoppla, das passiert, wenn man nicht aufpasst. Na dann kommt auch das richtige Ergebnis raus.

    Siehste. Denn ein Zeichen ist technisch gesehen auch ein Zahl, es ist also kein Problem, einer Zahl ein Zeichen zuzuweisen. Man kann auch ganz normal mit Zeichen rechnen. Beispielsweise benutzt man gerne den Fakt, dass '0' + 1 == '1' ist, usw. (beachte, dass '1' das Zeichen für die Ziffer Eins ist, wohingehen 1 die Zahl Eins ist).

    Eine Zeichenkette ist aber natürlich kein Zeichen, da geht das nicht.

    PS: Und eine andere Sache, die du daran siehst, dass du es oben versehentlich falsch gemacht hast: C ist ziemlich gnadenlos. Ein falsches Zeichen und ein Programm macht etwas völlig anderes als geplant. Fast alles ist irgendwie gültiges C, daher beschwert sich der Compiler selten. Daher muss man ganz genau aufpassen, immer genau das zu schreiben, was man meint, und nicht etwas, das nur so ähnlich aussieht.



  • SeppJ schrieb:

    Fast alles ist irgendwie gültiges C, daher beschwert sich der Compiler selten.

    Wenn man die Warnungen beim Compiler aktiviert und auch den Warnlevel entsprechend setzt, mosert der Compiler immerhin rum, dass etwas nicht so ganz sauber ist.

    Und diese Warnungen sollte man ernst nehmen.
    D.h deren Ursache beseitigen.


Anmelden zum Antworten