Variable nimmt Wert nicht an



  • Hi,
    ich bin neu in Sachen C++ Programmierung und habe ein kleines Problem.

    #include <stdlio.h>
    #include <stdlib.h>
    
    void main()
    {
    	int zahl;
    
            printf("Ne Zahl?\n");
    	scanf("%zahl",&zahl);
    
    	if (zahl<9)
    	{
    		printf("Unter 9.\n");
    	}
    	else
    	{
    		printf("Zahl ist größer als 9\n");
    
    	}
    
    printf("Zahl ist: %a",zahl);
    
    }
    

    Erwartungsgemäß erscheint ein schwarzes Fenster, ich tippe ne Zahl ein (z.B. 900) und gucke was bei raus kommt. Allerdings ist die Zahl immer kleiner als 9. 😕 Als letzte Bildschirmausgabe erscheint 0x1.965ecdp-244, sogar ohne "Zahl ist:" davor.

    Woran könnte das liegen? Ich nutze Visual C++ 2008.



  • erstens _muss_ die main-Funktion immer einen Integer als Rueckgabewert haben... void main also durch int main() ersetzen...

    desweiteren solltest du cin und cout fuer Ein- und Ausgabe verwenden. scanf und printf ist c

    #include <iostream>
    
    int main()
    {
        int zahl;
        std::cin >> zahl;
    
        if ( zahl < 9 )
        {
            std::cout << "Zahl ist unter 9" << std::endl;
        }
        else
        {
            std::cout << "Zahl ist groesser-gleich 9" << std::endl;
        }
    }
    


  • Das ist eher C als C++, was du da machst.

    Benutz einfach std::cin und std::cout , dann hast du das Problem nicht.

    Übrigens:

    void main()
    

    war noch nie C++. Die Standard-Header haben auch keine Endung mehr. Wenn du C-Header benötigst, dann inkludiere <cstdlib> (vorne ein c, dafür das .h nicht mehr). Aber für Ausgaben in C++ brauchst du eher <iostream> .

    Edit: Argh, zu spät... Immerhin hab ich noch gesagt, was am Header falsch ist. :p



  • Und wenn du unbedingt scanf verwenden willst, dann sieh mal nach, welcher Platzhalter für eine Ganzzahl steht. Das dürfte wohl eher %i bzw. %d sein, aber sicher nicht %zahl... 😉



  • ... und bei der Ausgabe am Ende ist %a genauso falsch.



  • Änder mal die beiden Instruktionen:

    GR-Thunderstorm schrieb:

    [...]
    
    	scanf("%d",&zahl);
    
    [...]
    
    printf("Zahl ist: %d",zahl);
    


  • Aller Anfang ist schwer 🙂



  • Ja sry, ich meinte eigentlich C. 😃
    Mit %i hats nun geklappt. Der hätte ja mal wenigstens nen Fehler anzeigen können, der darauf hätte schließen lassen. -.-

    Wieso ist das so wichtig, dass main einen Wert zurückgibt? 😕

    Wie muss ich vorgehen, wenn ich beispielsweise soetwas ausgeben will?

    char string[]="Wort";
    
    printf("Text: %c",string[??]);
    

    Man könnte zwar das Array Zeichen für Zeichen ausspucken lassen, aber das kanns ja nich sein. ^^



  • GR-Thunderstorm schrieb:

    Ja sry, ich meinte eigentlich C. 😃
    Mit %i hats nun geklappt. Der hätte ja mal wenigstens nen Fehler anzeigen können, der darauf hätte schließen lassen. -.-

    Wieso ist das so wichtig, dass main einen Wert zurückgibt? 😕

    Wie muss ich vorgehen, wenn ich beispielsweise soetwas ausgeben will?

    char string[]="Wort";
    
    printf("Text: %c",string[??]);
    

    Wenn du %c angibst, willst du nur ein einzelnes Zeichen (char) ausgeben, also z.B. string[0] ("W"). Willst du den ganzen String ausgeben, dann benutze %s und gib den Pointer ohne []-Operator an.

    main ist nunmal mit Rückgabewert int definiert. Benutzt werden kann dieser z.B. in Batch-Dateien (errorlevel).



  • Ok danke, hat geklappt. Allerdings ist es verwunderlich, dass C keinen String typ kennt, aber %s funktioniert dennoch... 😕



  • Das %s sagt ihm nur, das er es wie einen String interpretieren soll. "Damals" war es halt üblich Zeichenkennten mit Char-Arrays zu realisieren, was leider heute häufig noch gelehrt wird.


Anmelden zum Antworten