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 mainalso durchint main()ersetzen...desweiteren solltest du
cinundcoutfuer 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::cinundstd::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.