2017-11-16 1 views
0

absoluter Anfänger hier. Dies ist tatsächlich mein erstes kleines Coding-Projekt, das ich nach einer kleinen Menge an Lesen auf c gemacht habe. Hier ist mein Code.Simple Buffer Clear (c)

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
float temperature; 
float cels, fahr, kel; 



printf("Please enter your temperature.\n\n"); 

scanf("%f", &temperature); 

fflush(stdin); 

printf("\n\nIs this in fahrenheit, celsius, or kelvin? (type f,c, or k)\n"); 

char c; 

c = getchar(); 

if (c == 'f') 
    fahr = temperature; 

else if(c == 'c') 
    cels = temperature; 

else if(c == 'k') 
    kel = temperature; 


if (fahr = temperature){ 
    cels = (5*(fahr-32))/9; 
    kel = cels +273; 
} 

else if (cels = temperature){ 
    kel = cels + 273; 
    fahr = ((9 * cels)/5)+32; 
} 

else if (kel = temperature){ 
     cels = kel - 273; 
     fahr = ((9 * cels)/5)+32; 
} 


printf("\nOkay, so the temperatures are:\n"); 

printf("fahr: %f\tcels: %f\tkal: %f\n" , fahr, cels, kel); 
return 0; 
} 

Der Code für einen Temperaturwert, sollte überprüfen, auf einer Benutzereingabe basierend fragen, ob die Temperatur in Fahrenheit, Celsius oder Kelvin ist, dann findet er, was die Eingangstemperatur in den anderen Bedingungen gleich, und Ausgänge diese Werte.

Ich bin mir ziemlich sicher, dass das Problem, dass der Puffer immer noch einen Wert hat, wenn ich c = getchar verwende, um zu sehen, ob die Temperatur in Fahr, Cels oder Kel ist, daher das Programm nicht warten Sie auf eine Benutzereingabe in dieser Codezeile. Ich weiß jetzt, dass fflush (stdin); ist überhaupt nicht ideal beim Löschen des Puffers und ich bin mir nicht sicher warum (wie gesagt, kompletter Anfänger hier). Irgendwelche Erleuchtung zum Löschen des Puffers oder noch mehr dazu, wie die Puffereingabe funktioniert, würde sehr geschätzt werden. Vielen Dank.

+2

Die zweite if/else-Reihe tut nicht, was Sie erwarten, weil Sie '=' anstelle von '==' zum Testen des Werts – cedrou

+0

verwenden und dann die 2 if/else if in nur eine zusammenführen können: if (c == 'f') {fahr = Temperatur; cels = ...; kel = ...} sonst if (...) – cedrou

+0

Bitte beachten Sie [scanf() belässt die neue Zeile char im Puffer?] (https://stackoverflow.com/questions/5240789/scanf-leaves-the-new- line-char-in-buffer) –

Antwort

0

wegen Puffer Problem es ist nicht type f,c, or k frage, weil Sie tatsächlich geben zwei Eingangsone is your input & then ENTER(ENTER is one valid character) aber Sie verwenden nur ein getchar() entweder so two getchar() oder fpurge().

Statt

fflush(stdin); 

Gebrauch verwenden verwenden

__fpurge(stdin)