简单缓冲区清除(c)

时间:2017-11-16 16:46:49

标签: c input buffer

绝对是初学者。这实际上是我在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);在清除缓冲区方面并不理想,我不知道为什么(就像我说的,在这里完成初学者)。无论如何,任何有关清除缓冲区的启示,或者更多关于缓冲区输入如何工作的启发都将受到高度赞赏。谢谢。

1 个答案:

答案 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)