2013-04-06 3 views
-1

У меня есть этот код:Какое объяснение этого поведения scanf?

#include <stdio.h> 
int main() 
{ 
    char vc[5]={1,1,1,1,0}; 
    int vi[4]={0,0,0,0}; 

    printf("Reading characters...\n"); 
    for(int i = 0 ; i < 4 ; i++) 
     scanf("%c",&vc[i]); 

    printf("Reading numbers...\n"); 
    for(int i = 0 ; i < 4 ; i++) 
     scanf("%d",&vi[i]); 

    for(int i = 0 ; i < 4 ; i++) 
    printf("%c ",vc[i]); 

    printf("\n"); 

    for(int i = 0 ; i < 4 ; i++) 
    printf("%d ",vi[i]); 

    printf("\n"); 

    return 0; 
} 

можно ввести только 2 символа перед печатью «номера для чтения» и переходит к следующему за цикл. Почему итерация занимает всего 2 шага? Это должно быть 4.

+2

Вы вводите ENTER между вводами символов. Это создает новую строку. Вы попросили 'scanf' читать символы, а новая строка - символ (в частности' '\ n''). –

+0

Хорошо, что объясняет многое. Благодаря! – conectionist

ответ

1

Это потому, что %c не игнорирует пробелы, и вы, вероятно, попадаете в ответ. Попробуйте:

scanf(" %c",&vc[i]); 
    ^

Пространство делает scanf игнорировать любые пробелы.

+2

Вы должны поместить пространство в начале, а не в конец. Отбрасывая конечное пустое пространство, вы вынуждаете scanf читать до следующего небелого символа пробела, который почти никогда не требует поведения. – sepp2k

+1

Наверное, лучше поставить пробел перед директивой, иначе 'scanf' не вернется, пока не найдет следующее непробелое пространство. –

+0

Это правда, отредактировано. – cnicutar

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