2016-02-25 2 views
0

У меня возникли проблемы с моим методом readfile. Я не могу распечатать числовые значения в текстовом файле, но мое имя прекрасное.Проблемы с чтением файла с использованием цикла while

Это все, что находится внутри моего текстового файла:

Bob 

10 

12.00 

Код:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "iofunctions.h" 
int readfile(struct account accarray[], int* numcust, char filename[]) 
{ 
    /* variables */ 
    FILE *inputFile; 
    char line[25]; 
    char spaceEater[25]; 
    char name[25]={"\0"}; 
    int accountNum; 
    float money ; 

    inputFile = fopen("People_Info.txt", "r"); 
    if(inputFile == NULL) 
    { 
     fprintf(stderr, "Sorry, I cannot open this file. Also it's empty.\n"); 
     exit(1); 
    } 


/*outer loop is to check if file is not null*/ 
    while(!feof(inputFile)) 
    { 
     /*while file has something*/ 
     while(fscanf(inputFile,"%s %d %f", name,&accountNum,&money)) 
     { 
     accarray->accountno = accountNum; 
     accarray->balance = money; 
     printf("name = %s number = %d balance = %f\n", name, &accountNum, &money); 
     } 

    } 

    fclose(inputFile); 
    return 0; 

} 

Кроме того, это моя структура:

struct account 
{ 
    char name[25]; 
    int accountno; 
    float balance; 
}; 
+1

'fscanf()' * может * возвращение -1; (и 'while (! feof()) {}' всегда неверно) – joop

+0

Также вы уверены, что имя никогда не содержит более 24 символов? – Neijwiert

+1

Если 'fscanf()' возвращает 0, ваш код, похоже, перейдет в бесконечный цикл. И 'http: // stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong' неверен. См. Http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong –

ответ

6

Вам не нужно & для printf.

printf("name = %s number = %d balance = %f\n", name, &accountNum, &money); 

Использование ниже оператора печати (уведомление '&' удаляется Св только для чтения значения в scanf.)

printf("name = %s number = %d balance = %f\n", name, accountNum, money); 
+0

Это, вероятно, разрешит только половину проблем. Поскольку значения делятся на новые разделители строк и, вероятно, предшествуют возврату каретки. – Neijwiert

+0

@Neijwiert Я так не думаю. Разве 'fopen' не обрабатывает' \ r \ n' как '\ n', потому что второй аргумент' fopen' равен '" r "'? –

+0

Спасибо. С «&» я печатал адрес моих переменных вместо значений. – Zeroguy

Смежные вопросы