2016-11-09 5 views
2

Привет, у меня есть этот текстовый файл, где первый столбец в символе 2-го и 3-го числа является целым числом .. но я не могу читать и печатать значения correctley.не может правильно напечатать txt файл

Так что файл пытаюсь читать:

c 6 
o 4 3 
o 2 4 
o 3 2 
o 1 1 
o 3 3 

А вот код:

#include <stdio.h> 
#include <stdlib.h> 

#define N 6 

int main (int argc, char *argv[]) 
{ 
    int i; 
    int M[N]; 
    int U[N]; 
    char c ; 
    FILE* fichier = NULL; 

    fichier = fopen("pb1.txt","r"); 

if(fichier!= NULL) 
    { 
    while(!feof(fichier)) 
    { 
    fscanf(fichier, "%c %d %d", &c, &M[i], &U[i]); 

    printf("%c %d %d \n", c, M[i],U[i]); 
    } 

    } 
} 

Это то, что выходной сигнал выглядит как

c 6 1472131424 
o 4 3 

4 3 
o 2 4 

2 4 
o 3 2 

3 2 
o 1 1 

1 1 
o 3 3 

3 3 

у меня нет подскажите почему это дает мне это. спасибо

+1

Добро пожаловать в переполнение стека! См. [Почему? »(! Feof (файл))« всегда неправильно? »(Http://stackoverflow.com/q/5431941/2173917) –

ответ

1

Первой проблемой, которую я вижу здесь, является использование значения i неинициализированным. Он вызывает undefined behavior.

Чтобы уточнить, i - это автоматическая локальная переменная и, если она явно не указана, будет иметь неопределенное значение. Попытка использовать это приведет к UB.

Кроме того, вы никогда не увеличивали значение i, которое предполагается использовать как индекс для хранения и печати значений.

Наконец, всегда проверяйте возвращаемое значение scanf() и семью, чтобы обеспечить успех, прежде чем пытаться использовать отсканированное значение.

Это, пожалуйста, см. Why is “while (!feof (file))” always wrong?