所以,我在这里有一个练习,它是一个写在一个文件里的测验,每个问题有两个答案,每个问题在一行,在换行之前的最后一个字符是正确的答案。给定的答案和正确的答案用“$”分隔。示例文件如下所示:
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();
它将采取新的路线和程序将工作良好。