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

Sha*_*cik 1 c file-io

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

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

并且调用的文本文件configurationSettings.txt包含填充8个通道所需的信息:

Title1
20
30
Title2
10
0
Title3
34
03
...
Run Code Online (Sandbox Code Playgroud)

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


编辑:

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

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);
Run Code Online (Sandbox Code Playgroud)

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

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

20
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

我不会写代码,但总的来说可以尝试帮助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个元素.