2015-11-15 2 views
0

Я пытаюсь прочитать несколько целых чисел из текстового файла 500Mb, где целые числа являются ИНТ форматаRead Несколько Целые Из строки - C

1000002 1 55 
1000002 1000006 33 
1000002 1000007 8 
1000002 1000009 144 

Когда я пытаюсь и читать целые числа у меня есть проблема, когда программа не читает достаточно весь файл и тот файл, который он Рид не кажется, что правильные значения моего код

FILE *file; 
    file = fopen("user_artist_data.txt", "r"); 
    int User_ID, artist_ID, Play_Count = 0; 
    int check = 0; 
    while(fscanf(file, "%d %d %d", &User_ID, &artist_ID, &Play_Count) != 0) 
    { 
     check++; 
     printf("%d %d %d\n", User_ID, artist_ID, Play_Count); 
    } 
    fclose(file); 

Можете ли вы помочь мне с закреплением моего кода. Спасибо

+0

Прежде всего попробуйте проверить, если есть какая-то ошибка прочитайте и увидите значение 'errno' и его текстовое представление с' strerror (errno) 'сразу после выхода из цикла и перед закрытием' file'. –

+0

Вы программируете в TurboC с 16-битными целыми числами? – chqrlie

+0

Я использую GCC на OS X – Root0x

ответ

1

Прочитано тщательно документация fscanf(3) (вы, вероятно, должны прочитать его более одного раза).

Тогда вы поймете, что вы, вероятно, должны кодировать

while(fscanf(file, " %d %d %d", &User_ID, &artist_ID, &Play_Count) == 3) 

(обратите внимание, что пробелы обрабатываются как символы новой строки по fscanf)

BTW, если ваш файл ориентирован линии, вы будете лучше читать каждую строку, например getline(3) (или fgets, если getline недоступно), затем проанализируйте каждую строку с помощью sscanf(3). Преобразование спецификации %n, вероятно, очень полезно.

Не забудьте собрать все предупреждения и отладочной информации (например gcc -Wall -Wextra -g при использовании GCC ...) и использовать отладчик (например, gdb)

+0

ну, он может использовать формат и поставить 'fscanf' с'% d% d% d \ n'. –

+0

Нет, '\ n' - это то же самое, что и пространство для' fscanf' –

+0

Я изменил свой код, но когда я запустил его, fscanf фактически возвращает 3, поэтому цикл не запускается, есть причина, по которой это делается. Я собираюсь попробовать с getline сейчас – Root0x