从C中带有空格的文件中读取字符串

问题描述 投票:0回答:1

我正在用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);
    } 
c string file text whitespace
1个回答
0
投票

问题是%sfscanf格式读取空格分隔字符串。

我建议您通过在单独的行上写问题和选项来解决此问题。例如通过

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); 读取每一行。


0
投票

[尝试使用另一个分隔符,例如'_'更改

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);
© www.soinside.com 2019 - 2024. All rights reserved.