从文件中读取,但不是每行

时间:2016-10-28 13:55:32

标签: c string file file-io

我是编程的初学者,所以我只知道一些“基本”代码和方法来做事情,所以在写答案时,请记住我可能需要比人们在这个网站上通常需要的更多解释。谢谢!

我做了一个家庭作业来做一个基于文本的冒险游戏。 我必须将文件中的文本读入要使用的程序中。

起初我以为我会在一行写“问题”, 在该行之后的下三行将是具有3个“选择选项”的行。

使用这种方法,我将不得不创建4个字符串数组(问题,ans1,ans2和ans3),然后每隔4行读取这些字符串中的每一个(从不同的c行开始。)。

我希望你们明白我想在这里做些什么。但问题是,这可能吗?

如果是,那怎么样?

目前我有这段代码,但如果我把它放在一个循环中(对于/ while / etc。),这会将每一行都读入字符串中,但这并不好,因为我只需要将每4行放到一个数组中字符串。 告诉程序,只能从文件中读取每4行吗?

我目前的代码是:

char questions[40][200];
    FILE* fp;
    fp=fopen("text.txt", "r");
    int i;
    for (i=0; i<=3; i++)
        {
            fgets(questions[i], 200, fp);
        }
    fclose(fp);

这会使前4行进入字符串,这是不好的。在这种情况下,我想在我的字符串中的前4个问题。我应该如何更改代码才能实现这一目标?

2 个答案:

答案 0 :(得分:4)

一种方法是读取循环中的所有行。为每个问题选项创建其他数组(例如,用于保存所有&#34; A&#34;答案的数组),然后以隔行格式读取所有数组:

char questions[40][200];
char answersA[40][200];
char answersB[40][200];
char answersC[40][200];
/* ... */
for (i=0; i<=3 /* Or however many questions there are */; i++)
{
    fgets(questions[i], 200, fp); /* Read the question */
    /* Read the answers */
    fgets(answersA[i], 200, fp); /* Read the answer for option A */
    fgets(answersB[i], 200, fp); /* Read the answer for option B */
    fgets(answersC[i], 200, fp); /* Read the answer for option C */
}
/* ... */

加成

然后,如果您想获得特定问题i的三个答案选项,只需获取answersA[i]answersB[i]answersC[i]

答案 1 :(得分:1)

另一种方法是使用结构将所有属于一起的东西汇集在一起​​,即问题和答案:

personArray