所以,我在这里有一个练习,它是一个写在一个文件里的测验,每个问题有两个答案,每个问题在一行,在换行之前的最后一个字符是正确的答案。给定的答案和正确的答案用“$”分隔。示例文件如下所示:

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,它会打印出它是不正确的。有什么帮助吗?

最佳答案

getchar()一次只能得到一个字符。
当用户输入答案并按回车键时,“\n”字符在缓冲区中。
这样当第二个答案出现时,getchar()就得到了'\n'字符。
为了避免这种情况,
在这行后面再加一个getchar()。就像,

answer=getchar();
getchar();

它将采取新的路线和程序将工作良好。

09-30 13:10
查看更多