2013-04-08 3 views
0

Когда я пытаюсь использовать fscanf для чтения текстового файла, который содержит PIZZA CHIPS BURGERS как одну из строк. Я пытаюсь добавить их к переменной, но вместо этого она принимает только одну букву за раз.fscanf проблемы, принимая char время

if (infile) { 
    while (fscanf(infile, "%c", &cit) > 0) { 
     printf("%c\n",cit); 

Как заставить его взять слово PIZZA вместо P I Z Z A?

+4

Я не хочу быть грубым, но не использую '% c'. Используйте ''% s "' для одной строки. – squiguy

+0

Вы должны узнать больше о 'scanf' и его кодах форматирования. В ''% c ''' c' означает «символ», т. Е. Он считывает по одному символу за раз. Если вы хотите прочитать целую строку, вы должны использовать ['fgets'] (http://en.cppreference.com/w/c/io/fgets). –

+1

@JoachimPileborg: вам разрешено использовать, например, '% 255c', и он будет читать 255 символов (без пропуска ведущего пробела) плюс конечный нуль, независимо от пробелов, строк новой строки и т. Д. Конечно, значение по умолчанию для'% c' эквивалентно '% 1c', тогда как значение по умолчанию для'% s' - неопределенное количество символов (и оно пропускает начальное свободное пространство и останавливается в первом пробеле после начального пробела). Итак, да, вы обычно используете формат '% c', и он читает один символ, но это не единственный способ его использования. –

ответ

0
char word[256]; 

if (infile) 
{ 
    while (fscanf(infile, "%255s", word) == 1) 
     printf("Word: %s\n", word); 
} 

Обратите внимание, что если вы хотите, целая линия читать в то время, пробелы и все, то вы будете использовать fgets():

char line[4096]; 

if (infile) 
{ 
    while (fgets(line, sizeof(line), infile) != 0) 
     printf("Line: %s", line); 
} 

NB: fgets() держит символ новой строки, если строка не так что он должен быть усечен, поэтому формат printf() не нуждается в новой строке. Как правило, легче управлять вводом, если вы используете fgets() и sscanf(), чем если бы вы использовали только scanf() или fscanf(). В частности, вы можете обычно лучше диагностировать ошибки, потому что у вас есть все, что пользователь набрал. Вы также можете попробовать альтернативные форматы, если это необходимо.

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