Anfängerprobleme mit C

Endixt

Cadet 1st Year
Registriert
Juni 2016
Beiträge
15
Guten Abend!

Wie schon beschrieben, hab ich ein absolutes Anfängerproblem in C mit der Scanf-Funktion. Und zwar folgendes:

Ich habe ein sehr einfaches Programm zur Umrechnung von °C in °K geschrieben. Nun möchte ich natürlich die °C per scanf einlesen. Das Programm öffnet sich, und die Eingabe kommt. Aber sobald ich zum Beispiel 30 eingebe, und mit Eingabe bestätige, springt das Programm in die nächste Zeile und macht ersteinmal gar nichts, solange, bis ich nochmals eine Zahl eingebe und mit Enter bestätige. Erst ab der 2. Eingabe, führt das Programm alle folgenden Befehle aus...

Das Programm lautet wie folgt:


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 gewünschte Gradzahl ein: ");
fflush (stdin);
scanf ("%f", &a);
fflush (stdin);

b=a+273.15;

printf ("\n\n%f °C sind %f °K!", a, b);

}


Ich verstehe nicht, wo das Problem liegt.

Vorab gleichmal vielen Dank für die Hilfe!

Endixt
 
Zuletzt bearbeitet:
AW: Anfängerprobleme mit C++

Vielen Dank für den Hinweis!
 
Wie kommst Du darauf, daß ein Leerzeichen eine Eingabebestätigung ist?
 
scanf erwartet immer Enter als Bestätigung der Eingabe. Wieso kommst du auf die Leertaste?
 
Aaaah, Entschuldigung!

Ich meinte natürlich mit Enter bestätigen! Ich besser das gleich mal aus!
 
Bei mir funktioniert mit einmal Enter alles bestens.
Wenn du aber zu a und b eine Kommazahl addierst, sollten sie keine int sein sonder float.
 
Tja, und genau hier liegt das Problem, bei mir eben nicht.
Das mit float habe ich abgeändert, daran lags aber nicht.
 
Zuletzt bearbeitet:
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...
 
Versuch bitte, den Code mit den entsprechenden Tags zu formatieren, dann ist das besser lesbar :)
Ansonsten:
Code:
b=a+273,15;
Das wird nix, denn du hast a und b als int deklariert. Da kommst du mit Kommazahlen nicht hin. float und double schaffen Abhilfe. Außerdem musst du die Zahl mit Punkt, nicht mit Komma schreiben.

Ob das jetzt das Problem löst, weiß ich nicht, aber probier das mal aus.
 
Zuletzt bearbeitet: (long und double verwechselt)
Ich habe leider keine Ahnung, was das bedeutet.
Ergänzung ()

Das ist richtig. Aber das hat das Problem leider nicht gelöst.
 
runagrog schrieb:
Versuch bitte, den Code mit den entsprechenden Tags zu formatieren, dann ist das besser lesbar :)
Ansonsten:
Code:
b=a+273,15;
Das wird nix, denn du hast a und b als int deklariert. Da kommst du mit Kommazahlen nicht hin. float und long schaffen Abhilfe. Außerdem musst du die Zahl mit Punkt, nicht mit Komma schreiben.

Ob das jetzt das Problem löst, weiß ich nicht, aber probier das mal aus.

Schrank schrieb:
Bei mir funktioniert mit einmal Enter alles bestens.
Wenn du aber zu a und b eine Kommazahl addierst, sollten sie keine int sein sonder float.

Hab ich auch oben angemerkt.
 
Zeig doch mal den Quelltext in der aktuellen Version :)
Welche Zahl von denen, die du eingibst, wird denn zur Berechnung herangezogen? Die erste oder die zweite?

Mit welchem Programm programmierst du?
 
runagrog schrieb:
Zeig doch mal den Quelltext in der aktuellen Version :)
Welche Zahl von denen, die du eingibst, wird denn zur Berechnung herangezogen? Die erste oder die zweite?

Mit welchem Programm programmierst du?


Also: Quelltext hab ich auf einem anderen PC, aber habe oben das Programm soweit abgeändert, wie es nun auch aktuell in C bei mir offen ist. Es wird die 1. Zahl herangezogen, das heisst, die Berechnung stimmt soweit auch. Nur der Ablauf, dass eben eine 2. Zahl eingegeben werden muss, ist verwirrend. Ich arbeite mit Code:Blocks.

Übrigens vielen Dank für die schnelle Hilfe!
 
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!
 
Zuletzt bearbeitet:
Zurück
Oben