我想制作一个程序,可以阅读正确的答案,检查学生的答案与正确的答案比较,然后显示每个答案的要点。问题是,每次插入第一个答案时,程序会跳过第二个答案并跳转到第三个答案。以下是每次结果:
“插入答案1:a
插入答案2:插入答案3:“
这是我的代码:
#include <stdio.h>
int main()
{
char v[30], a[30][20];
int i,j,c;
for (i=0; i<30; i++)
{
printf("Insert the answer %d: ", i+1);
scanf("%c", &v[i]);
}
for(j=0; j<20; j++)
{
printf("Student %d\n", j+1);
for (i=0; i<30; i++)
{
printf("Insert your answer %d: ", i+1);
scanf("%c", &a[i][j]);
}
}
for(j=0; j<20; j++)
{
c=0;
printf("Student %d\n", j+1);
for (i=0; i<30; i++)
{
if (v[i] == a[i][j])
c=c+1;
}
printf("Points: %d\n", c);
}
return 0;
}
答案 0 :(得分:2)
问题是scanf()
在缓冲区中留下了\n
,所以第二次调用会读取它,然后第三次调用将缓冲区变为空并等待输入。
您可以使用此
自行清洁缓冲区void cleanBuffer(){
while(getchar() != '\n');
}
或停止使用scanf()
并使用fgets()
代替并使用sscanf()
获取数据,有几个原因可以解释为什么你要做后者。
答案 1 :(得分:1)
scanf( "%c", &var );
只读取stdin
中的一个字符。因此,第一个scanf
读取一个字符,第二个scanf
读取换行符\n
。要解决此问题,请使用
scanf( " %c", &var );
^----- note the space
在%c
之前放一个空格告诉scanf
在阅读字符之前跳过空格(包括换行符)。