我的文本文件是这样的(文件中的数据也会增加)
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/