我正在用C语言编写测验程序,我的程序的一部分是从文本文件中获取问题,进行计数并打印出来。但是,当我每次看到空白时要打印或计数时,都会跳至其他变量。我该如何解决?
这是我的txt文件
What is the Capital of France? Paris Roma London Istanbul Belgrad
以及程序中的外观。
What
a)is
b)the
c)capital
d)of
e)France
这就是我得到问题的方式
FILE *fp = fopen("fp.txt", "a+");
gets(questions[n].question_part);
gets(questions[n].a);
gets(questions[n].b);
gets(questions[n].c);
gets(questions[n].d);
gets(questions[n].e);
questions[n].answer=getch();
fprintf(fp, "%s %s %s %s %s %s %c", questions[n].question_part, questions[n].a, questions[n].b, questions[n].c, questions[n].d, questions[n].e, questions[n].answer);
n++;
我如何计算
int x=0;
while(!feof(fp)){
fscanf(fp, "%s %s %s %s %s %s %c", questions[x].question_part, questions[x].a, questions[x].b, questions[x].c, questions[x].d, questions[x].e, questions[x].answer);
x++;}
n=x;
以及我如何打印
FILE *fp;
fp = fopen("fp.txt", "r");
int y;
for(y=0;y<n;y++)
{
printf("\nQuestion number %d:\n",y+1);
printf("Question: %s\n",questions[y].question_part);
printf("a)%s\n",questions[y].a);
printf("b)%s\n",questions[y].b);
printf("c)%s\n",questions[y].c);
printf("d)%s\n",questions[y].d);
printf("e)%s\n",questions[y].e);
printf("Answer: %c\n",questions[y].answer);
}
问题是%s
的fscanf
格式读取空格分隔字符串。
我建议您通过在单独的行上写问题和选项来解决此问题。例如通过
fscanf
现在您可以用fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n%c\n", questions[n].question_part, questions[n].a, questions[n].b, questions[n].c, questions[n].d, questions[n].e, questions[n].answer);
读取每一行。
[尝试使用另一个分隔符,例如'_'更改
fgets
to
fgets
和
fprintf(fp, "%s %s %s %s %s %s %c", questions[n].question_part, questions[n].a, questions[n].b, questions[n].c, questions[n].d, questions[n].e, questions[n].answer);
to
fprintf(fp, "%s_%s_%s_%s_%s_%s_%c", questions[n].question_part, questions[n].a, questions[n].b, questions[n].c, questions[n].d, questions[n].e, questions[n].answer);