c - 从文件中读取数据到结构体数组 (C)

标签 c if-statement struct file-management

我正在尝试构建一个简单的函数,它将接收一个数据文件,并将数据文件中的各种值分配给一个全局结构数组。但是,我无法让它正常工作。我已经编写了我认为大部分需要的代码,但我的测试行 printf("time is %d\n", BP[i].time); 只是读出“Time is 0。” 10 次,让我相信这些值并没有像我想象的那样分配给结构数组。

我该如何继续?

示例数据文件 (.txt):

0001    553    200
0002    552    100
....    ...   ...

当前代码:

#include <stdio.h>
#include <stdlib.h>

// Function Prototype
void readFileBP(char fileName[1000]);

// Definition of BP Structure
struct bloodPressure
{
    int *time;
    int *sys;
    int *dia;
}BP[50]; // end struct BP

int main()
{
    char fileName[1000] = "C:\\Users\\User\\Desktop\\DataFiles\\BP_1.txt";
    readFileBP(fileName);

    int i = 0;

    for (i; i<10; i++)
    {
        printf("Time is %d\n", BP[i].time);
    }
} // end int main()

void readFileBP(char fileName[1000])
{
    FILE *filePtr; // declare file pointer
    int time;
    int sys;
    int dia;
    int position = 0;


    if (filePtr = fopen(fileName, "r") == NULL) // error check opening file
    {
        printf("Opening file failed. Please reenter filename.");
        exit(1); 
    } // end if

    while (fscanf(filePtr, "%d, %d, %d", &time, &sys, &dia) != EOF) // read in BP values
    {
        BP[position].time = time;
        BP[position].sys = sys;
        BP[position].dia = dia;
        position++;

    } // end while

    fclose(filePtr);



} // end void readFile()

最佳答案

编译时启用警告。你应该得到这样的东西:

gsamaras@gsamaras-A15:~$ gcc -Wall -o px px.c
px.c: In function ‘main’:
px.c:22:5: warning: statement with no effect [-Wunused-value]
     for (i; i<10; i++)
     ^
px.c:24:9: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
         printf("Time is %d\n", BP[i].time);
         ^
px.c: In function ‘readFileBP’:
px.c:37:17: warning: assignment makes pointer from integer without a cast [enabled by default]
     if (filePtr = fopen(fileName, "r") == NULL) // error check opening file
                 ^
px.c:37:5: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
     if (filePtr = fopen(fileName, "r") == NULL) // error check opening file
     ^
px.c:45:27: warning: assignment makes pointer from integer without a cast [enabled by default]
         BP[position].time = time;
                           ^
px.c:46:26: warning: assignment makes pointer from integer without a cast [enabled by default]
         BP[position].sys = sys;
                          ^
px.c:47:26: warning: assignment makes pointer from integer without a cast [enabled by default]
         BP[position].dia = dia;
                          ^
px.c: In function ‘main’:
px.c:26:1: warning: control reaches end of non-void function [-Wreturn-type]
 } // end int main()
 ^

这还不足以让您入门吗?这是给我的! :)

关于c - 从文件中读取数据到结构体数组 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36694259/

相关文章:

if-statement - 或内部条件

Python:struct.unpack 的生成器版本

c - 释放结构中的数组后的 SIGABRT

c - MATLAB "C"DLL 错误

c - Kernighan 和 Ritchie C 练习 1-22(折叠长输入线)

c++ - 将 C++ 复杂数组传递给 C

c - C中的for循环错误

java - 确定一对字符串中的任何一个是否结束另一个字符串

if-statement - 一般来说,用一对嵌套的 IF 替换 AND 会加快速度吗?

c - 将节点插入链表末尾