Wöchentlich Programme schreiben...
-
Ja:
double wert;
Hab ich was gewonnen?
-
CarstenJ schrieb:
Ja:
double wert;
Hab ich was gewonnen?
Was ist daran falsch?
Der Fehler ist imo hier:
scanf("%f",&wert);
Wer %f schreibt, muss als nächstes einen Zeiger auf float übergeben. Hier wird aber ein Zeiger auf double verwendet.printf("Die Zahl lautet %f\n",wert);
Hier bedeutet das %f dafür double und damit ist die Übergabe von wert ok.Kann mir mal bitte jemand erklären, wo der wirkliche Fehler ist?
-
Achso:
printf("Eine Gleitpunktzahl bitte: ");
Heißen die Dinger hier nicht "Gleitkommazahl"?
-
..
-
Was ist daran falsch?
Na richtig isses doch auch nicht, oder?
float wert;
Wenn ich das so schreibe gibts keine Probleme.
scanf("%f",&wert);
Wer %f schreibt, muss als nächstes einen Zeiger auf float übergeben. Hier wird aber ein Zeiger auf double verwendet.Ist das nicht das gleiche, nur andersrum erklärt?
-
Es geht auch so. Der Typ double hat aber höhere Genauigkeit als float.
-
Na, das war ja richtig amüsant mit dem alten C. Noch eine Kleinigkeit zum Anwärmen (Anfängerstatus):
Ein C++-Konsolen-Programm soll diese Ausgabe liefern:
Was möchtest du? Ich hätte da eine Frage: "Wieviel Mühe macht C++?"
Bitte mit deutschen Umlauten (ä,ö,ü) und in der dritten Zeile auch die Anführungszeichen.
-
Das war wohl zu leicht:
#include <conio.h> #include <iostream> using namespace std; int main() { cout<<"Was m"<<static_cast<char>(148)<<"chtest du?"<<endl; cout<<"Ich h"<<static_cast<char>(132)<<"tte da eine Frage:"<<endl; cout<<"\"Wieviel M"<<static_cast<char>(129)<<"he macht C++?\""; getch(); return 0; }
-
HumeSikkins schrieb:
Kann mir mal bitte jemand erklären, wo der wirkliche Fehler ist?
Zu dem offiziellen Fehler gab es noch einen. stdout ist in keiner Weise (das ist ein wenig stark -- unter Unix ist das zB schon so ...) an stdin geknüpft. Da printf nicht selbständig den Puffer ausleert kann es passieren, dass die Eingabe verlangt wird (also scanf), ohne dass vorher irgendetwas ausgegeben wurde. Das kann man zwar so machen (ist also nicht wirklich falsch), trotzdem tut das Programm nicht das (für den Menschen offensichtlich) richtige.
Erhard: Dein C++-Programm ist auch nicht der Renner. char kann vorzeichenbehaftet sein und das positive Maximum kann kleiner als 129 sein. Damit provozierst Du einen Überlauf. Der Code hat folglich undefiniertes Verhalten. Und was er ausgibt, wenn wir von richtigen Bedingungen ausgehen (unsigned char), wissen wir auch nicht.
-
@Daniel E.: Deine Hinweise sind interessant, aber "besser machen" würde mehr Lerneffekt bringen.