所以,我在这里做了这个练习,它是一个在文件中写的测验,每个问题有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并打印出来这是不正确的。有什么帮助吗?
答案 0 :(得分:2)
getchar()
一次只能获得一个字符。
当用户输入答案并按回车键时,&#39; \ n&#39;字符在缓冲区中。
这样getchar()
在第二次回答时会得到'\n'
字符。
为避免这种情况,
在此行之后添加另一个getchar()
。像,
answer=getchar();
getchar();
新版本和程序将正常运行。