我有一个看起来像这样的文本文件:
1 2 4
3 5 2
9 7 6
4 2 6
未知大小,最多50行。
我试图将int存储在struct
数组中typedef struct column{
int col_1;
int col_2;
int col_3;
} column;
我创建了stuct列数组
column column[50];
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE * myfile;
int i = 0;
if ((myfile = fopen("/home/numbers.txt","r"))==NULL)
{
printf("File %s not found\n", "/home/numbers.txt");
exit(0);
}
if ("/home/numbers.txt" == NULL)
{
printf("There was an error reading %s", "/home/numbers.txt");
}
while(fscanf(myfile,"%d %d %d", &column[i++].col_1, &column[i].col_2, &column[i].col_3) == 3)
{
printf("\n%d %d %d", column[i].col_1, &column[i].col_2, &column[i].col_3);
}
我得到一个像这样的数字列表
-420921 -420924 -420927
它似乎是一些内存地址,因为它们显然不是实际的数字。
我的问题是获取整数而不是一些相当随机的数字,我试过&amp;在printf中的变量之前,那并没有用,反之亦然。
非常感谢您的帮助。
答案 0 :(得分:2)
if ("/home/numbers.txt" == NULL)
......永远不会成真。
尝试稍微改变你的循环:
while(i < 50 && fscanf(myfile,"%d %d %d", &column[i].col_1, &column[i].col_2, &column[i].col_3) == 3)
{
printf("\n%d %d %d", column[i].col_1, column[i].col_2, column[i].col_3);
i++;
}
......实际上,当你确定scanf的参数时,你正在递增你的计数器,传递谁知道什么。
答案 1 :(得分:0)
这里有很多不妥之处 - 这个:
if ("/home/numbers.txt" == NULL)
{
printf("There was an error reading %s", "/home/numbers.txt");
}
没有做任何明智的事 - 摆脱它。并且您的循环代码具有未定义的行为。在打印出您读取的值后,增加循环体中的索引。
答案 2 :(得分:0)
它似乎是一些记忆 地址,因为它们显然是 不是实际的数字。
那是因为你正在打印地址!
printf("\n%d %d %d", column[i].col_1, &column[i].col_2, &column[i].col_3);
(除了col_1,您/重新打印地址)