绝对是初学者。这实际上是我在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;
}
代码应该询问温度值,如果温度是华氏度,摄氏度或开尔文,则根据用户输入进行检查,然后找到输入温度等于其他项的值,并输出这些值。 / p>
我很确定我遇到的问题是当我使用c = getchar查看温度是否为fahr,cels或kel时,缓冲区仍然有一个值,因此程序不会等待对于该行代码的用户输入。我现在知道fflush(stdin);在清除缓冲区方面并不理想,我不知道为什么(就像我说的,在这里完成初学者)。无论如何,任何有关清除缓冲区的启示,或者更多关于缓冲区输入如何工作的启发都将受到高度赞赏。谢谢。
答案 0 :(得分:0)
由于缓冲问题而没有问type f,c, or k
,因为实际上你提供了两个输入 one is your input & then ENTER(ENTER is one valid character)
,但你只使用了一个getchar()
所以使用two getchar()
或使用fpurge().
而不是
fflush(stdin);
使用
__fpurge(stdin)