如何将txt文件中的数据加载到我的C程序中的变量中?

我有一个具有通道结构的程序:

struct channel { char title[40]; float gain; float offset; }; int main (int argc, char **argv) { struct channel channels[8]; } 

还有一个名为configurationSettings.txt的文本文件,其中包含填充8个通道所需的信息:

 Title1 20 30 Title2 10 0 Title3 34 03 ... 

我如何将数据从文本文件中提取到适当的变量中?


编辑:

这是我到目前为止的方向:

 FILE *fptr; if ((fptr=fopen("configurationSettings.txt","r"))==NULL){ printf("\n\nConfiguration file not found.\n"); // exit(1); // Program exits if file pointer returns NULL. } while (1) { if (fgets(loadedTitle,150, fptr) == NULL) break; if (fgets(loadedGain,150, fptr) == NULL) break; if (fgets(loadedOffset,150, fptr) == NULL) break; printf("%s", loadedTitle); printf("%s", loadedGain); printf("%s", loadedOffset); strcpy(channels[i].title, loadedTitle); loadedGain == channels[i].gain; loadedOffset == channels[i].offset; } printf("\n\n%s", channels[i].title); printf("%f", channels[i].gain); printf("\n%f", channels[i].offset); fclose(fptr); 

这是我得到的输出。 它基本上只是打印所有内容并将最后一行存储为第一个变量。 这绝对不是我想要的。

 Title 1 10 30 Title 2 50 0 Title 3 38 20 20 

我不会写代码,但总的来说可以尝试帮助algotihm。

  1. 打开文件。 帮助: fopen()
  2. 检查是否成功打开。 提示:返回值。
  3. 从文件中读取一行。 检查是否成功。 帮助: fgets()和返回值。
  4. 基于数据模式,标记化读取行并存储到数组中。 帮助: strtok()
  5. 继续,直到令牌为NULL。

注意:在第4点,您需要将一些标记转换为float类型。 帮助: strtod()


编辑:

Appriciate添加代码。 您的代码的反馈

  1. 取消注释// exit(1); ,如果fopen()失败,你真的应该 (注意,不能,你也可以跳过 )退出。

  2. fgets()在一次读取一行 。 所以基本上,你需要三个连续的fgets()来填充结构的一个实例。 第一个fgets()将给出title ,第二个gain ,第三个offset

  3. fgets()读取并存储尾随\n 。 你可能想要摆脱它。

  4. 使用counter来跟踪结构数组成员索引。 你的数组在这里只有8个元素。