使用fgets进行文件读取

时间:2018-03-31 23:08:28

标签: c for-loop fgets

我不熟悉在C语言中使用字符串,并且需要从包含字符串和数字的数据文件行中读取数据,并在进行时解析它们。我已经完成了类似的程序读取数字,例如有序对的列表,使用for循环,所以这是我倾向于的策略。

文件中数据行的示例:PART,2.000,-1,0.050,V

当我编译时,我在'char'之前的“预期表达式”的for循环声明中得到一个错误。在此代码中缺少什么或需要检查?

#define flush fflush(stdin)
#define N 50

int main()
{
    flush;
    const char part[] = "PART";           // String for PART variable
    char descriptor[N];     // Starting string of data set
    double p_dim[N];         // Array for part dimensions
    int t_sens[N];          // Array for sensitivity values: -1 or +1
    double t[N];             // Array for part tolerance, bilateral
    char t_status[N];       // Array for tolerance status, F(ixed) or V(ariable)
    double key_max;  // Maximum value of key characteristic
    double key_min;  // Minimum value of key characteristic


    FILE* fpin;

    if((fpin = fopen("input.txt","r"))==(FILE*)NULL)
    {
        printf("File input does not exist\n"); exit(-1);
    }
// For loop to parse data lines from file    
    for(N; char* fgets(descriptor, int N, FILE* fpin); N-1);
        {
                 compare(descriptor, part);
            if (descriptor == part)
            {
                fscanf(fpin, "%lf,%d,%lf,%s", p_dim[N], t_sens[N], t[N], t_status[N]);
            }
            else if (descriptor != part)
            {
                fscanf(fpin, "%lf, %lf", &key_min, &key_max);
            }
        }

2 个答案:

答案 0 :(得分:1)

1。)#define flush fflush(stdin)

刷新stdin调用未定义的行为。

2。)if((fpin = fopen("input.txt","r"))==(FILE*)NULL)

(FILE*)的演员阵容是多余的。

3。)for(N; ... ; N-1);

您将N定义为常量(#define N 50),因此此循环不会退出。

4。)for(... ; char* fgets(descriptor, int N, FILE* fpin); ...);

这是完全错误的......

答案 1 :(得分:0)

我更倾向于打破弦乐 请参阅问题3501338,逐行读取文件 请参阅问题15472299,使用strtok拆分字符串
如果你需要将字符串转换为数字,请使用sscanf