Problem mit Code

Erks

Erfahrenes Mitglied
Ich weiß...das hier ist ein eigenlich simpler Code, aber ich frage micht trotzdem was hier für ein Fehler ist. Ich hab mich heut erst entschieden auch mit C++ anzufangen, und nun ist halt mein erstes Problem da....
PHP:
#include <cstdlib>
#include <iostream>

using namespace std;

main()
{
char name[5];
int age;

printf("Gib deinen Namen ein : ");
scanf("%s",&name);
printf("Hallo, %s , wie alt bist Du?\n",&name);
scanf("%d",&age);
printf("Du bist %d Jahre alt.\n",&age);
if(age<18)
          printf("Du bist noch minderjährig!\n\n\n"); 
if(age>=18 && age<21)
          printf("Mit 21 bist Du auf der ganzen Welt erwachsen!\n\n\n");
if(age>=21)
          printf("Jetzt bist Du auf der ganzen Welt erwachsen!\n\n\n");          


system("pause");
return EXIT_SUCCESS;
}

bei diesem Code...
scanf("%d",&age);
ist es glaub ich so, dass das, was man eingibt, in der Variabel age gespeichert und der gespeicherte Wert in %d im folgenden Text ausgegeben wird. Aber wenn ich jetzt "21" eingebe, sagt der mit im folgenden Codeabschnitt...

"Du bist 2359132 Jahre alt."

Warum nimmt der %d nicht an, und was sollte man verbessern?
 
Hi.
Die Haupteinsprungsroutine "main" muss int zurückgeben.
PHP:
printf("Hallo, %s , wie alt bist Du?\n",&name);
scanf("%d",&age);
printf("Du bist %d Jahre alt.\n",&age);
Du hast dir mit diesem printf Aufruf die Adresse der Variablen age ausgeben lassen.

Bei scanf mußt du die Adresse einer Variablen angeben (mit Hilfe des & Adressoperators), damit die Funktion scanf den eingebenen Wert dorthin speichern kann.

Bei printf darfst du nicht die Adresse sondern nur den Wert angeben:
C++:
printf("Hallo, %s, wie alt bist Du?\n", name);
scanf("%d",&age);
printf("Du bist %d Jahre alt.\n", age);
Beachte auch, das der Name den der Nutzer in deinem Programm eingibt max. 4 Zeichen haben darf!

Warum verwendest du denn nicht cin, cout wenn du schon C++ hast? Ist doch viel einfacher:
C++:
int age;
cout << "Wie alt bist du?";
cin >> age;
cout << "Du bist " << age << " Jahre alt." << endl;

Gruß
 
Zuletzt bearbeitet:
Besser kann man es eigendlich nicht sagen^^ Die Variable "Name" Hätte ich aber noch verlängert da die wenigsten Namen mit nur 4 Buchstaben haben ( was deepthroat acuh schon sagt). Was mich aber ein wenig iritiert ist das du %d anstelle von %i nimmst.... Ist nich %i der Operator für Integier-Werte...?

Aber lass dich von der Frage nicht ablenken Erks, wenns geht ist es ja auch egal^^

mfg Apfelkuchen
 
Zuletzt bearbeitet:
Was mich aber ein wenig iritiert ist das du %d anstelle von %i nimmst.... Ist nich %i der Operator für Integier-Werte...?
Bei der Ausgabe sollten %d und %i gleichbedeutend sein, bei der Eingabe gibt es aber einen Unterschied: %d erwartet immer eine Dezimalzahl, während %i auch Hexadezimalen (beginnend mit 0x oder 0X) und Oktalzahlen (beginnend mit 0) erlaubt. Wenn dies nicht gewünscht ist, sollte man %d verwenden.

Grüße,
Matthias
 
Zurück