C文件I / O - 需要比较每行的不同标准输入字符

时间:2014-12-27 06:25:42

标签: c file input

所以,我在这里做了这个练习,它是一个在文件中写的测验,每个问题有2个答案,每个问题在一行,其中换行前的最后一个字符是正确的答案。给出答案以及正确的答案用' $'分隔。这是示例文件的样子:

Koja zemja koristi najmnogu elektrichestvo?$а)SAD$b)Kina$b
Koe e najchesto ime vo svetot?$a)Li$b)Muhamed$b

因此,程序需要打印出一个问题以及给定的答案,等待stdin的答案,然后检查答案是否正确。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv) {
    //if(argc!=2) {printf("Upotreba: ./2 <vlezna datoteka>"); return -1;}
    FILE *read=fopen("kviz.txt", "r");
    //if((read=fopen(argv[1], "r"))==NULL) {printf("Ne postoi takva datoteka."); return -1;}
    int i=0;
    int j;
    char answer;
    char string[200];
    while(fgets(string, 200, read)!=NULL)
    {
        string[strlen(string)-1]='\0'; //remove newline
        for(i=0;i<strlen(string);i++)
        {
            if(string[i]=='$') string[i]=' ';
        }
        for(i=0;i<strlen(string)-1;i++)
        {
            printf("%c", string[i]);
        }
        answer=getchar();
        if(answer==string[strlen(string)-1]) {printf("Correct answer.\n"); continue;}
        else {printf("Incorrect answer.\n"); continue;}
    }
    fclose(read);
    return 0;
}

现在该程序适用于第一个问题,但它只允许我输入一次答案。我得到的输出是:

Koja zemja koristi najmnogu elektrichestvo? а)SAD b)Kina b
Correct answer.
Koe e najchesto ime vo svetot? a)Li b)Muhamed Incorrect answer.

如果您注意到,在第二个问题之后我还没有插入答案,它只需要我先输入的答案并进行比较,并且比较也很糟糕,因为问题2的答案也是b并打印出来这是不正确的。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

getchar()一次只能获得一个字符。

当用户输入答案并按回车键时,&#39; \ n&#39;字符在缓冲区中。

这样getchar()在第二次回答时会得到'\n'字符。

为避免这种情况,

在此行之后添加另一个getchar()。像,

answer=getchar();
getchar();

新版本和程序将正常运行。