Du wirst - zumindest im Internet - keine hilfreiche Hilfe bekommen, wenn Du nicht lernst, richtig zu fragen.
Wir sitzen nicht vor deinem Computer, können also auch nicht sehen, was "ich habe nun ausprobiert, dass es besser läuft" oder "er rechnet dennoch falsch" wohl bedeuten könnte.
Eine richtig gestellte Frage sieht immer so aus: ich habe "x" gemacht, "y" erwartet und "z" ist dabei herausgekommen. Was muss ich an "x" ändern, damit "y" passiert?
"x", "y" und "z" sollten dabei möglichst ausführlich erklärt sein. Wir sind keine Hellseher.
P.S.: Computer rechnen (im Allgemeinen) nicht falsch. Sie rechnen vielleicht nicht das, was man erwartet hätte, aber falsch in den seltensten Fällen.
Probleme/ Buch Einstieg in C
Re: Probleme/ Buch Einstieg in C
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
Re: Probleme/ Buch Einstieg in C
Hallo SueNa!
"%lf" steht für die Eingabe von Double, während "%1f" nur ein Zeichen für die Eingabe einer Float-Zahl zulässt.
Genau das ist das Problem. Es sollte "%lf" (kleines L) sein und nicht "%1f" (eine Eins).
"%lf" steht für die Eingabe von Double, während "%1f" nur ein Zeichen für die Eingabe einer Float-Zahl zulässt.
Re: Probleme/ Buch Einstieg in C
also sorry für meinen Fragestil
ist nicht böse gemeint . .. Danke für die Tipps und alles und Danke wegen dem Hinweis wegen dem %1f
statt %lf
jetzt funktioniert es . . .
ich habe bei der Deklaration float angegeben und in den Zeilen, in denen die scanf Funktion steht, habe ich statt "%lf" nur "%f" geschrieben. . .
den Tipp mit der Berechnung habe ich auch beachtet und jetzt funktionieren beide Programme
JUHUU

statt %lf
jetzt funktioniert es . . .
ich habe bei der Deklaration float angegeben und in den Zeilen, in denen die scanf Funktion steht, habe ich statt "%lf" nur "%f" geschrieben. . .
den Tipp mit der Berechnung habe ich auch beachtet und jetzt funktionieren beide Programme

Re: Probleme/ Buch Einstieg in C
ich nehme mir das mit dem richtig Fragen stellen wirklich für meine nächsten Fragen zu Herzen . . . Danke ne 

- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Probleme/ Buch Einstieg in C
Sorry für die späte Antwort, das Wochenende war ziemlich voll.
Die Eingabe sieht gut aus, die Summe ist vielleicht etwas groß gewählt.
Als erstes füge ich mal ein paar Ausgaben dazu, um zu gucken, was der Computer überhaupt versteht, kompiliere neu und lasse mir das ausgeben.
Da kommt raus:
Die Anzahl ist also korrekt angekommen, die Double nicht, hier gibts wörtwörtlich ein großes Missverständnis, obwohl das Format scheinbar stimmt:
Bei mir steht %lf, bei Dir %1f. Oder mal als Text: Klein-El-Eff bei mir, Eins-Eff bei Dir.
Entsprechend gibt der Compiler auch auf Anforderung eine Warnung raus:
Er versteht also 1f nicht für "long floats", sondern für "float". Die Warnung ist der Hinweis, dass hier beim Einlesen etwas hakt.
Ändern wir den Quelltext entsprechend bei scanf, läuft das Programm so ab:
Wie gesagt:
Woher weiß ich sowas? Erstens habe ich es selbst schon verwechselt, zum anderen habe ich mal C und C++ Kurse gegeben. Du bist nicht die erste.

Du darfst auch rechnen, aber Du wenn Du zuverlässige Ergebnisse haben möchtest, musst Du mit Variablen rechnen, die bereits initialisiert hast - also denen bereits Werte zugewiesen sind. Wichtig dabei: Die Ergebnisse von Berechnungen ändern sich nicht mehr, wenn Du Variablen änderst.
Ja, die Berechnungen müssen später stattfindenSueNa hat geschrieben: ↑Fr Mär 29, 2019 5:40 pmalso wäre es richtig, wenn ich einfach nur:
schreibe?Code: Alles auswählen
int anzahlEA,anzahlZA; double preisEA,preisZA; double SoR, rabatt=0.2, SmR;
Ich habe das mal hier durch den Compiler gejagt (Windows 10, deutsch) und als Preis einmal 2 und einmal 2.50 eingetragen.
Die Eingabe sieht gut aus, die Summe ist vielleicht etwas groß gewählt.
Code: Alles auswählen
Erster Artikel, Anzahl:5
Erster Artikel, Preis in Euro:2
Zweiter Artikel, Anzahl:2
Zweiter Artikel, Preis in Euro:2.50
Summe ohne Rabatt:157022887065377420000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000.00 Euro
Summe mit Rabatt:1256183096523019400000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000.00 Euro
Code: Alles auswählen
scanf("%1f", &preisZwei);
printf( "Anzahl1 %d * Preis1 %lf\n", anzahlEins, preisEins );
printf( "Anzahl2 %d * Preis2 %lf\n", anzahlZwei, preisZwei );
/*Berechnung*/
Code: Alles auswählen
C:\Users\xin\test\Sue>a.exe
Erster Artikel, Anzahl:5
Erster Artikel, Preis in Euro:2
Zweiter Artikel, Anzahl:2
Zweiter Artikel, Preis in Euro:2.50
Anzahl1 5 * Preis1 31404577413075484000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000.000000
Anzahl2 2 * Preis2 54961368115593132000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
Summe ohne Rabatt:157022887065377420000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000.00 Euro
Summe mit Rabatt:1256183096523019400000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000.00 Euro
Code: Alles auswählen
scanf("%1f", &preisZwei); // Deine Eingabezeile
printf( "Anzahl1 %d * Preis1 %lf\n", anzahlEins, preisEins ); // Meine Ausgabezeile
Entsprechend gibt der Compiler auch auf Anforderung eine Warnung raus:
Code: Alles auswählen
C:\Users\xin\test\Sue>gcc test.c -Wall
test.c: In Funktion »main«:
test.c:14:1: Warnung: Format »%f« erwartet Argumenttyp »float *«, aber Argument 2 hat Typ »double *« [-Wformat]
test.c:20:1: Warnung: Format »%f« erwartet Argumenttyp »float *«, aber Argument 2 hat Typ »double *« [-Wformat]
Ändern wir den Quelltext entsprechend bei scanf, läuft das Programm so ab:
Code: Alles auswählen
C:\Users\xin\test\Sue>a.exe
Erster Artikel, Anzahl:5
Erster Artikel, Preis in Euro:2
Zweiter Artikel, Anzahl:2
Zweiter Artikel, Preis in Euro:2.50
Summe ohne Rabatt:15.00 Euro
Summe mit Rabatt:12.00 Euro
Da ich das Programm noch kannte, dachte ich an ein for( int i = 1; ... ). Das kleine l wird da auch gerne optisch verwechselt. (i1l!|, je nach Zeichensatz sind das optisch schnell nur Striche in der Landschaft.)
Woher weiß ich sowas? Erstens habe ich es selbst schon verwechselt, zum anderen habe ich mal C und C++ Kurse gegeben. Du bist nicht die erste.

Viel besser, danke

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Probleme/ Buch Einstieg in C
Merke... nach dem Wochenende erst darauf achten, ob es eine Seite zwei gibt... Narf...

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Probleme/ Buch Einstieg in C
Vielen Dank für die Hilfe und Mühe 
