Hi Leute!
Ich hab folgendes Problem:
#include <stdio.h>
int main()
{
int auswahl;
float wechselkurs = 0.93142;
float wechselkurs2 = 1.07363;
long double resultat;
long double chf;
long double dollar;
printf("<1> um CHF in Dollar umzurechnen\n");
printf("<2> um Dollar in CHF umzurechnen\n");
scanf("%i, &auswahl");
switch(auswahl)
{
case 1 : printf("Bitte Betrag in CHF eingeben\n");
scanf("%ld, chf");
resultat = chf*wechselkurs;
printf("%ld Schweizer FR sind %ld Dollar",chf,resultat);
break;
case 2 : printf("Bitte Betrag in Dollar eingeben\n");
scanf("%ld, &dollar");
resultat = dollar*wechselkurs2;
printf("%ld Dollar sind %ld Schweizer FR",dollar,resultat);
break;
default : printf("Unbekannte Eingabe!");
}
system("PAUSE");
return 0;
}
Wenn ich dieses Programm ausführen und die Wahl treffen will, stürzt es immer ab!
Kann mir jemand helfen?
Wieso
scanf("%i, &auswahl");
Du willst doch einen int - wert einlesen , oder ?
dann mach es so:
scanf("%d", & auswahl);
Und wenn ich schon dabei bin;
Allgemein:
scanf("%d ,& Zahl");
Währe falsch
Richtig ist es so:
scanf("%d", & Zahl);
Da hab ich noch ein Paar Fehler entdeckt, die damit zutun haben
1.: keine doppelposts, es gibt einen edit button und
2.: was meinst du warum er wohl %i nimmt? weil er einen integer einlesen will. deshalb heisst es ja %i, %d ist meines wissens für double, genau wie %f für float ist, %c für characters und so weiter.
mach auch kaum sinn %d für integer -.-
man kann nur deshalb auch %d nehemn, weil double genauer sind als integer
Och , Entschuldigung dass ich helfen wollte -.-
Da wird man ja gleich schön begrüst.
Also für mich ist %d und %i das selbe. So habe ich es auch gelernt ( aus einem sehr guten c - programming Buch)
Zudem benutze ich grundlegend %d für int,du etwa nicht ?
doch, ich auch, aber du hast ja behauptet %i sei falsch, was es nicht ist. es wird wohl wie du gesagt hast an den falsch gesetzten anführungszeichen liegen
Ja , eig hab ich das nie behauptet , eher nur dumm geschrieben ^^
Ich finde persönlich %d eleganter , um einen Int wert einzulesen.
Naja , dann währe dieses Thema Ja geklärt
Jo ganz einfach Leut:
So da ist einiges Falsch erstes machst du das scanf falsch es muss so sein scanf("%d",
&auswahl);
und nicht
scanf("%i, auswahl");
So das & zeichen ist sehr wichtig sonst geht gar nicht
Und außerdem würde ich das nicht mit case machen sondern mit if also:
if(auswahl == 1)
{
...code...
}
if(auswahl == 2)
{
...code...
}
else
{
...code...
}
und dann fehlt dir noch die Headerdatei stdlib.h
also oben noch
#include <stdlib.h>
sonst kann man mit der Funktion system("PAUSE"); nicht viel anfangen
#include <stdio.h>
#include <stdlib.h>
int main()
{
int auswahl;
float wechselkurs = 0.93142;
float wechselkurs2 = 1.07363;
long double resultat;
long double chf;
long double dollar;
printf("<1> um CHF in Dollar umzurechnen\n");
printf("<2> um Dollar in CHF umzurechnen\n");
scanf("%d", &auswahl);
if(auswahl == 1)
{
printf("Bitte Betrag in CHF eingeben\n");
scanf("%ld", &chf);
resultat = chf*wechselkurs;
printf("%ld Schweizer FR sind %ld Dollar\n",chf,resultat);
}
if(auswahl == 2)
{
printf("Bitte Betrag in Dollar eingeben\n");
scanf("%ld", &dollar);
resultat = dollar*wechselkurs2;
printf("%ld Dollar sind %ld Schweizer FR\n",dollar,resultat);
}
else
{
printf("Unbekannte Eingabe!\n");
}
system("PAUSE");
return 0;
}
PS: Bist du durch mich auf die Idee gekommen ?
BTW: Neutro man kann %d für int nehmen wird sogar in Buch C von A bis Z so gelehrt
PS²: Du könntest die Tasten auch mit getch(); einlesen also ohne scanf dazu brauch man nur den Tastatur Code
ja, ich weiss dass es auch mit %d geht, mache ich ja auch, nur %i ist nicht falsch ^^
ach ja stehn, der switch ist wesehntlich eleganter als die if bedingungen, wiso würdest du nicht den switch benutzen? ich zumindest würde da auch einen switch benutzen.
Naja jeder wie er will
Ich bin eher der If Freak
aber wie gesagt mit getch(); wäre es um einiges besser musst halt bloß wissen wie man es anwendet
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
int x;
x = getch();
if(x == tastaturcode)
{
.....code....
}
sytem("PAUSE");
return 0;
}
Ganz easy
Definitiv Switch
Deine Art ist sehr unelegant und viel länger.
In einem längeren Programm würde das zudem unübersichtlich werden.
Ps: Das Problem war schon lange gelöst ^^
Wie gesagt bin der If Freak
Und wisst ihr eigentlich was ich mit getch(); mein nicht das ich mir umsonst die mühe mach xD
Das ist viel besser im Programm da man nur die Taste drücken muss nicht eingeben und enter
Bei manchen Programmen ist das gar nicht gut, da man seine Eingabe nicht bestätigen kann und es sofort ausgeführt wird.
Nehmen wir an der Anwender vertippt sich - das könnte fatale Folgen haben.
Mit scanf Hingegen hat der Anwender die Chance , sich zu korrigieren
Oh ja bei der Auswahl zwischen 1 und 2 wird das Extreme Folgen haben
Da hast du recht bei anderen Programmen aber hier kann er bei der Auswahl zwischen ein und 2 das ruhig machen.
Hab mal ein Beispiel gemacht welches Zeigt wofür getch(); gut ist
http://www.multiupload.com/6PG42EN909
xDDDD
Du weisst , was ich mein
Danke Leute!
Nun weiss ich auch warum meine Programmme immer abgestürzt sind - wegen scanf.
Gut jetzt weiss ich wie mans macht...
@stehn
Ja, ich wollte irgendetwas machen und da fiel mir dein Währungsrechner ein