Piktogramm schrieb:Ergänzung ()
Nachtrag,
Wieso steht in Post 1 jetzt scanf mit %f wenn Ganzzahlen gefragt sind? Das ist doch Käse!
Inzwischen sind a und b beide float.
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Piktogramm schrieb:Ergänzung ()
Nachtrag,
Wieso steht in Post 1 jetzt scanf mit %f wenn Ganzzahlen gefragt sind? Das ist doch Käse!
Piktogramm schrieb:1. Nutze bitte <CODE> </CODE> um Quelltext im Post einzubetten. Dadurch bleibt die Formatierung erhalten!
2.
Code:#include <stdio.h> int main(){ int a; printf("Programm zur Berechnung von °C in °K!\n\n"); printf("Bitte geben Sie die gewünschte Gradzahl ein: "); scanf("%i", &a); a=a+273.15; printf("\n\n"); printf("entspricht %i K", a); }
GCC kompiliert und zeigt kein auffälliges Verhalten.
3. Die Typedefinition der Variablen ist relativ egal. Wenn int = int * float gerechnet wird, wird normalerweise schlicht nur der ganzzahlige Anteil ins Ergebnis übertragen (ohne Runden). Das kann mitunter recht praktisch sein. Sollte jedoch in der Masse vermieden werden, da dieses Vorgehen mehr Rechenzeit benötigt als das Berechnen reiner Integerwerte.
Im Beispiel wäre ein Summand ohne Komma sinnvoller.
4. Rein aus dem Bauch heraus, es kann immer mal wieder sein, dass der Tastaturbuffer noch Daten enthält, die scanf nicht auf integer parsen kann. Erweitere dein Schnippsel probehalber einfach um eine Routine, die den Eingabebuffer leert, bevor die eigentliche Eingabe kommt.
Ergänzung ()
Nachtrag,
Wieso steht in Post 1 jetzt scanf mit %f wenn Ganzzahlen gefragt sind? Das ist doch Käse!
Endixt schrieb:Ich arbeite mit Code:Blocks.
Übrigens vielen Dank für die schnelle Hilfe!
Piktogramm schrieb:Könntest du den aktuellen Quelltext bitte je einen neuen Post gönnen? Kommt der Nachvollziehbarkeit zugute . Auch eine gescheite Formatierung des Quelltextes solltest du dir angewöhnen.
Wieso die Variablen auf float geändert werden, obwohl das ursprüngliche Problem damit zu tun hat versteh ich nicht. BruteForce Debugging funktioniert in der Regel nicht -.-
Welchen Compiler nutzt du, und wie führst du das Prog aus?
Schrank schrieb:Wie führst du denn dein Programm aus ?
Lässt du es in Code::Blocks laufen oder in einer neuen Kommandozeile ?
Funktioniert es auch wenn du beim 2. mal nur Enter drückst und nichts eingibst ?
Wenn du die 2. Zahl eingibst, welche Zahl wird dann umgerechnet und welche ignoriert ?
Endixt schrieb:Vielleicht noch ein kurzer Hinweis: Ich starte das Programm von einem USB Stick, es ist nicht auf meiner Festplatte installiert....
Vielleicht macht das ja einen Unterschied, ich weiss es nicht...
Schrank schrieb:Kompilierst du das Programm auf dem einen Rechner und führst es dann auf dem anderen PC aus ?
Piktogramm schrieb:Ich weiß ja nicht wer auf fflush gekommen ist, aber fflush ist für Ausgabeströme gedacht (gewöhne dir an die Dokumentation zu C-Funktionen zu lesen bevor du sie verwendest!). Eingabebuffer lehrt man üblicherweise mit dem Lesen von eben diesem bis er leer ist.
Probier es mal selbst mit einer Schleife, die den Eingabebuffer liest und abbrift wenn EOF erreicht ist.
#include <stdio.h>
int main ()
{
float a;
float b;
printf ("Programm zur Berechnung von C in K!\n\n");
printf ("Bitte geben Sie die gewuenschte Gradzahl ein: ");
scanf ("%f", &a);
b=a+273.15;
printf ("\n\n%f C sind %f K!", a, b);
return 0;
}
Schrank schrieb:Ich kann es leider nicht reproduzieren, habe mir gerade Code::Blocks Portable herunter geladen und mit "Build and run" ausgeführt. Funktioniert alles mit einem Enter. Hier nochmal der Code.
<CODE>
#include <stdio.h>
int main ()
{
float a;
float b;
printf ("Programm zur Berechnung von C in K!\n\n");
printf ("Bitte geben Sie die gewuenschte Gradzahl ein: ");
scanf ("%f", &a);
b=a+273.15;
printf ("\n\n%f C sind %f K!", a, b);
return 0;
}
</CODE>
Endixt schrieb:Nagut. Dann werde ich vielleicht einfach mal probieren, das Programm auf dem PC zu installieren, vielleicht klappt es ja dann.
Trotzdem vielen Dank, für die Mühe!
Schrank schrieb:Ich habe es auch nicht direkt installiert, sondern die portable Version, also die für den USB-Stick.
gcc --version
scanf("%f%c", &a, &c);
scanf("%f%c", &a, &c);
scanf("%f%*c", &a);
scanf("%f%*c\n", &a);
siehe scanf Dokuuint8_t result = scanf(...)
soyd schrieb:Hi,
nettes Problemchen, welche gcc Version benutzt du denn?
in der Windows Eingabeaufforderung eingeben.Code:gcc --version
Ich schätze du hast eine Kombination aus gcc / Win10 die mit dem "Enter" nicht klar kommt.
Linux Enter = \n
Windows Enter = \r\n
Du könntest mal diese 3 Sachen gegentesten:
1.
c ist ein charCode:scanf("%f%c", &a, &c);
2.
3.Code:scanf("%f%c", &a, &c);
char nach float wird ignoriertCode:scanf("%f%*c", &a);
4.
voll definiert sollte klappenCode:scanf("%f%*c\n", &a);
Ich würde Abstand nehmen von der scanf Funktion und wenn dann den Rückgabewert mit auswerten...
siehe scanf Doku
Schöner geht das mit gets, das liest einen String bis zum \n ein. Danach in nen float parsen.
*edit
Grad beim Antworten klicken kams mir, welche gcc Compile Optionen sind den aktiv?
gcc -std=c99 sollte es tun.
Gruß
Alex