【发布时间】:2014-12-27 06:25:42
【问题描述】:
所以,我在这里有这个练习,它是一个写在文件中的测验,每个问题有 2 个答案,每个问题都在一行中,换行符之前的最后一个字符是正确答案。给出的答案和正确的答案用“$”分隔。示例文件如下所示:
Koja zemja koristi najmnogu elektrichestvo?$а)SAD$b)Kina$b
Koe e najchesto ime vo svetot?$a)Li$b)Muhamed$b
因此,程序需要打印出一个问题以及两个给出的答案,等待标准输入的答案,然后检查答案是否正确。这是我的代码:
#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 并且它打印出来是不正确的。有什么帮助吗?
【问题讨论】:
-
answer=getchar();当您输入该答案时,您认为 afterward 输入的换行符发生了什么?它仍然位于输入缓冲区中,下一个getchar()将拾取它(这是您阅读的下一个答案,显然a或b都不是)。 -
这是我目前还不知道的。谢谢。
-
您应该始终检查 I/O 语句(如 fopen() )返回的值,以确保操作成功
-
声明:'继续;'不需要,因为代码已经在 while 循环的末尾
-
嗨, continue 语句只是我测试一些东西,看看我是否能让代码工作。并且检查 fopen() 在那里,我只是将其注释掉以用于该程序的测试目的