Чтение и хранение целых с помощью scanf в C - PullRequest
0 голосов
/ 16 декабря 2010

У меня есть текстовый файл, который выглядит так:

1 2 4
3 5 2
9 7 6
4 2 6

неизвестного размера до 50 строк.

Я пытаюсь сохранить целые числа в массиве 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

Кажется, это некоторые адреса памяти, потому что они, очевидно, не являются действительными числами.

Моя проблема в том, чтобы получить целые числа, а не некоторые довольно случайные числа, я пробовал & перед переменными в printf, и это не сработало, и наоборот

Ваша помощь будет принята с благодарностью.

Ответы [ 3 ]

2 голосов
/ 16 декабря 2010
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 определяются, передавая who-знает-что.

0 голосов
/ 16 декабря 2010

это, кажется, некоторые адреса памяти, потому что они явно не являются действительными числами.

Это потому, что вы печатаете адреса!

printf("\n%d %d %d", column[i].col_1, &column[i].col_2, &column[i].col_3);

(кроме col_1, вы / распечатываете адрес)

0 голосов
/ 16 декабря 2010

Многочисленные вещи не так - вот:

if ("/home/numbers.txt" == NULL)
{
    printf("There was an error reading %s", "/home/numbers.txt");

}

ничего толкового не делает - избавься от этого. и ваш код цикла имеет неопределенное поведение. Увеличьте индекс в теле theloop после распечатки прочитанных вами значений.

...