如何从txt文件读取逗号分隔的数据到结构

How to read comma delimited data from txt file to struct

我有包含以下内容的文本文件

inputfile

我使用函数从逗号分隔的输入文件中获取数据。 我想从中读取数据并删除逗号并将数据存储到 Struct Resistor_struct。 我试过下面的代码。

'''

#include<stdio.h>

//functions header
int blown_ressistors();


struct resistor_struct
{
    char ID_LEN[5];
    char id;
    float max_poewr; 
    int resistance;
};

struct resistor_struct rs[100];

int blown_ressistors()
{
    
    FILE *fp = fopen("input.txt", "r");
    int i = 0;
        
    if(fp!=NULL)
    {
        while(fscanf(fp, "%s[^,], %d[^,], %f[^,]",rs[i].ID_LEN,rs[i].resistance, rs[i].max_poewr)!=EOF)
        {
            
            printf("%s\t", rs[i].ID_LEN);
            printf("%d\t", rs[i].resistance);
            printf("%d\t\n", rs[i].max_poewr);
            i++;
        }
    }
    else 
    {
        perror("Input.txt: ");
    }

'''

输出 output image

您不想将 scanf 返回的值与 EOF 进行比较。 在您的情况下,格式字符串使得 scanf 永远不能匹配超过 1 个转换说明符,因为 %s[^,], 试图匹配文字输入字符串 [^,],[保证不匹配,因为 scanf 将停止为 %s 使用的第一个字符是空格。 [ 不是空格。尝试类似的东西:

while(fscanf(fp, " %4[^,], %d, %f", rs[i].ID_LEN, &rs[i].resistance, &rs[i].max_poewr) == 3 )

但请注意,这将在第一列的空白处表现得很奇怪。您 可能 想尝试:" %4[^, \t\n] , %d, %f",但坦率地说,更好的解决方案是 stop using scanf。即使像这样微不足道的事情,你的行为在像 foo, 9999...9999 这样的输入上也是不确定的(其中第二列是任何超过 int 容量的值)。停止使用 scanf。读取数据并用 strtolstrtod.

解析它