我的文本文件是这样的(文件中的数据也会增加)

    822
    172.28.6.56
    172.34.34.53
    3244
    5434

    844
    192.150.160.145
    192.67.45.123
    2344
    234


    700
    192.13.56.6
    192.89.95.3
    4356
    3566

    522
    172.28.6.137
    172.28.6.110
    2543
    5245

    900
    255.255.255.255
    244.244.244.244
    2435
    3245

我的结构是这样的
    struct input_par
    {
    int key_node;
    char src_ip[15];
    char dst_ip[15];
    int src_port;
    int dst_port;
    };

我必须从文件中存储的数据填充这个结构,一旦它完成输入结构的5个成员,我必须将这个结构发送到一个函数
也就是说,我用
    822
    172.28.6.56
    172.34.34.53
    3244
    5434

然后我将这个结构发送给一个函数,在将它发送给一个函数之后,我应该用文件中的下一个数据再次输入这个结构,即
    844
    192.150.160.145
    192.67.45.123
    2344
    234

我必须一直这样做直到我到达EOF。
我用过fscanf如果它不正常怎么办?请帮忙

最佳答案

只要这些结构之间只有一个空间。。。我可能会做这样的事。这很难看,但是只要你确定你的最大行大小并且文件结构没有任何问题(额外的空行等),就可以完成任务。否则,最好编写更好的代码,在出现异常时处理并中断/返回。
如注释所示,您需要确保增加char数组的数目,以在结尾处解释“\n”。以下是对我最初发布内容的一些修改。注意,如果行尾是基于窗口的(我相信),这可能会中断。我添加了一些技巧来尝试更正数组空间和字符的问题。

struct input_par
{
int key_node;
char src_ip[21];
char dst_ip[21];
int src_port;
int dst_port;
};


FILE* file = fopen("inputfile.txt", "r");
char linebuffer[21]; //a little extra room here than needed, presumably...
struct input_par ip;
int i = 0, l = 0;

while(fgets(linebuffer, 20, file))
{
   ip.key_node = atoi(linebuffer);
   fgets(linebuffer, 20, file);
   strcpy(ip.src_ip, linebuffer);

   l = strlen(linebuffer);
   for(i = 0; i < l; ++i){
      if(linebuffer[i] == '\n'){
         linebuffer[i] = '\0'
         break;
      }
   }

   fgets(linebuffer, 20, file);
   strcpy(ip.dest_ip, linebuffer);

   l = strlen(linebuffer);
   for(i = 0; i < l; ++i){
      if(linebuffer[i] == '\n'){
         linebuffer[i] = '\0'
         break;
      }
   }

   fgets(linebuffer, 20, file);
   ip.src_port = atoi(linebuffer);
   fgets(linebuffer, 20, file);
   ip.dst_port = atoi(linebuffer);
   fgets(linebuffer, 20, file); //get the empty line
}

关于c - 将文本文件读入结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6014045/

10-11 22:42
查看更多