嗨,这个问题可能看起来有点愚蠢,但我面临着一些严重缺乏基本面的问题,我无法弄明白。这是一个非常简单的扫描四个字符的代码,但它无法正常工作。这是一个较大程序的摘录,但这是我遇到问题的地方。谁能指出犯错的地方?
#include<stdio.h>
#include<stdlib.h>
{
char a, b, c, d;
printf("Enter the value of a\n");
scanf("%c", &a);
if(a == 'Y')
{
printf("Enter if this question is stupid or no Y/N\n");
scanf("%c", &b);
}
else
{
printf("This is such a big waste of time");
}
printf("Enter the value of c\n");
scanf("%c", &c);
if(c == 'Y')
{
printf("Enter if I am stupid or no? Y/N\n");
scanf("%c", &d);
}
else
{
printf("I will go mad soon\n");
}
}
答案 0 :(得分:2)
我认为由于换行符可能会出现问题。尝试使用
scanf(" %c", &var)
注意:我原来的回答是错误的但是被接受了,我从@teppic复制了这个解决方案。
答案 1 :(得分:2)
%c
说明符告诉scanf
仅读取一个字符。当您键入一个字符并按Enter键时,您将提供两个字符。所以下一个电话已经有了一个要阅读的角色。
为了使这项工作正常,您需要在阅读字符之前跳过任何空格。像这样更改每个电话:
scanf(" %c", &a)
现在您输入的所有上一个换行都将被跳过。
答案 2 :(得分:-1)
扫描角色后,您没有冲洗缓冲区,当您输入一个字符并按ENTER键然后在下一次扫描中,您的ENTER被视为一个字符,这就是它跳过第二次扫描的原因。在每次扫描后使用这些__fpurge(stdin),fpurge(stdin)中的任何一个,无论你的系统是什么。它会工作。