使用C中的scanf读取和存储整数

时间:2010-12-16 11:09:07

标签: c scanf

我有一个看起来像这样的文本文件:

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中的变量之前,那并没有用,反之亦然。

非常感谢您的帮助。

3 个答案:

答案 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,您/重新打印地址)