C语言,这有什么问题?

时间:2015-03-28 18:38:51

标签: c xcode

我想制作一个程序,可以阅读正确的答案,检查学生的答案与正确的答案比较,然后显示每个答案的要点。问题是,每次插入第一个答案时,程序会跳过第二个答案并跳转到第三个答案。以下是每次结果:

“插入答案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;
}

2 个答案:

答案 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在阅读字符之前跳过空格(包括换行符)。