编写一个程序遇到的疑问

#include
int main()
{
float t = 0;
float invalue;
float average;
char ch;
float all = 0;
for (;;)
{
printf("请输入数据:");
scanf("%f", &invalue);
all = all + invalue;
printf("%f\n", all);
t = t + 1;
printf("%f\n", t);
average = all / t;
printf("%f\n", average);
printf("please input Y GO ON ");

        scanf("%c", &ch); 
        if (ch != 'Y')
        {
            break; 
        }



    }

return 0;

}

在visual studio 2015中为什么我的scanf("%c", &ch); 语句不执行

因为你在前面一个scanf('%f")输入的时候,你输入的其实是一个数字+一个回车,而scanf('%f")只是把数字的部分给处理了,剩下的一个回车没有处理,还是属于你的输入。所以到了scanf("%c")的时候,这个回车就被自动读取作为ch的值了。

你把前面的那个scanf("%f")改成scanf("%f\n")就好了。这样你第一次输入的这个回车就不会被作为后来的输入了。

scanf("%f", &invalue);下面加个getchar()清空键盘缓冲区。

使用这两句话,来对输入时多余的符号和换行符进行清除(清除键盘缓冲区)

    scanf("%*[^\n]");
    scanf("%*c");

以后在每个scanf()语句后都加上这两句就不会出现这种问题了。