我有一个包含频道结构的程序:
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
答案 0 :(得分:5)
我不会写代码,但总的来说可以尝试帮助algotihm。
fopen()
fgets()
和返回值。 strtok()
注意:在第4点,您需要将一些令牌转换为float
类型。 帮助:strtod()
编辑:
Appriciate添加代码。您的代码的反馈
取消注释// exit(1);
,如果fopen()
失败,你真的应该(注意,不是必须,你也可以跳过)
fgets()
一次读取一条行。所以基本上,你需要连续三个fgets()
来填充结构的一个实例。第一个fgets()
将title
,第二个gain
,第三个offset
。
fgets()
读取并存储尾随\n
。你可能想要摆脱它。
使用counter来跟踪结构数组成员索引。你的数组在这里只有8个元素。