2015-01-24 5 views
0

я очень новичок в C и есть этот простой код здесь:код после fscanf() не выполняет

int main(int argc, char **argv){ 

    FILE *input = stdin; 

    char string[20]; 
    while (fscanf(input, "%s",string)) { 
     printf("String: %s \n",string); 
    } 
    printf("Done"); 

    return 0; 
} 

Проблема, которую я имею, что «Сделано» строка никогда не будет напечатана. Когда цикл while завершит чтение из stdin, он ничего не выполнит после него. Есть ли какая-то концепция, о которой я не знаю? Заранее спасибо.

+1

У вас может быть переполнение буфера. Убедитесь, что вы вводите не более 19 символов в приглашение (или расширяете размер строки [20]) – user590028

+0

Этого недостаточно, отправьте части входного файла. –

+0

Строка char [20] не означает, что каждая так называемая строка не выделяет 20 символов? Я ввел только одно слово под 20 символами, а printf после того, как цикл все еще не выполняется. – dhint4

ответ

5

Вы должны изменить его искать EOF:

while (EOF != fscanf(input, "%s",string)) { 

EOF характер ^Z в Windows, или ^D в * NIX (т.е. Ctrl + Z или Ctrl + D). После ввода символа EOF вам все равно нужно нажать enter, потому что ввод с клавиатуры будет буферизирован.

+0

спасибо за ваш ответ, но я просто попробовал это, и сделанная инструкция printf все еще не выполнена. – dhint4

+0

@ dhint4 помните, что «^ D» frasnian означает «удерживать управление и нажать D». – davmac

+0

@davmac, если я нажимаю Crtl-D, выполняется инструкция printf, но я хочу, чтобы это было сделано автоматически, как же EOF в моих циклах while не делает этого? – dhint4

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