【问题标题】:Read from file, but not every line从文件中读取,但不是每一行
【发布时间】:2016-10-28 13:55:32
【问题描述】:

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

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

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

使用这种方法,我必须创建 4 个字符串数组(questions、ans1、ans2 和 ans3),然后将每 4 行读入每个字符串(从不同的 c 行开始)。

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

如果是,那怎么办?

目前我有这段代码,但是如果我把它放在一个循环中(for/while/etc.),这会将每一行读入字符串,但这并不好,因为我只需要每第四行进入一个数组的字符串。 告诉程序,这有可能只读取文件的每 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 个问题。我应该如何更改我的代码来实现这一点?

【问题讨论】:

  • 有一个计数器,最多读取并丢弃 3 个,存储第 4 个并重置。
  • 无论如何,您都必须阅读每一行;您可以在阅读后决定忽略一行,但您仍然需要阅读它。您必须在文件上施加更多结构才能在不阅读中间行的情况下跳过。这是可能的,但比仅仅阅读和忽略线条要困难得多。
  • 为什么不一次读完:1个问题,3个答案,然后重新开始。
  • @alk 你的意思是这样的吗?例如,这行代码会起作用吗? : for (i=0; i
  • 取决于所有这些变量的定义方式。试试看吧!

标签: c string file file-io


【解决方案1】:

一种方法是读取循环中的所有行。为您的每个问题选项创建额外的数组(例如,保存所有“A”答案的数组),然后以交错格式读取它们:

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]

【讨论】:

  • 哦,我从没想过这会奏效!这比我想象的要容易。非常感谢您的回答和帮助,您得到了支持,我会尽快接受您的回答作为解决方案!快速而有用的答案!谢谢!
  • 我编辑了我的答案以删除“D”选项,因为您在问题中指出您只有三个答案。如果您想要不同数量的答案,只需阅读正确的数字即可:)
【解决方案2】:

另一种方法是使用结构将属于一起的内容组合在一起,即问题和答案:

#define QUESTION_SIZE (300)
#define ANSWER_SIZE (200)
#define NUMBER_OF_QUESTIONS (42)
#define NUMBER_OF_ANSWERS (3)

struct QA
{
  char question[QUESTION_SIZE];      
  char answers[NUMBER_OF_ANSWERS][ANSWER_SIZE];
}

int main(void)
{
  struct QA qa[NUMBER_OF_QUESTIONS] = {0};

  FILE fp = .... /* open file here */

  size_t q;
  for (q = 0; q < NUMBER_OF_QUESTIONS; ++q)
  {
    fgets(qa[q].question, sizeof qa[q].question, fp);

    {
      size_t a;
      for (a = 0; a < NUMBER_OF_ANSWERS; ++a)
      {
        fgets(qa[q].answers[a], sizeof qa[q].answers[a], fp);
      }
    }
  }

  fclose(fp);

  ... /* do stuff */

【讨论】:

    猜你喜欢
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    相关资源
    最近更新 更多