2013-11-13 6 views
0

Я пытаюсь использовать код ниже. Но когда я вводим целое число, тогда программа не запрашивает символ. Программа выполняет строку printf. Как я должен избегать проблемы выше ?.Использование функции scanf

#include <stdio.h> 
void main() 
{ 
    char a[5]; 
    int p; 
    printf("data\n"); 
    scanf("%d",&p); 
    scanf ("%c",&a); 
    printf("--> %c %d\n",a,p); 
} 
+2

Честно говоря, лучший способ избежать проблемы - использовать 'fgets' и' strtol'. 'scanf' слишком хрупкий, чтобы его можно было надежно использовать. –

ответ

1

Поместите пространство scanf так:

scanf (" %c",&a); 
     ^-------note 

Так что завершающий символ новой строка съедается. После того, как вы нажмете enter после ввода целочисленного ввода - в буфере есть завершающий символ новой строки, который читает второй вызов scanf. Также main согласно ISO должен возвращать int

Кроме того, это утверждение неверно:

char a[5]; 
printf("--> %c %d\n",a,p); 

Вы читаете полукокса и печать массива. Вам просто нужно:

char a; 
printf("--> %c %d\n",a,p); 

Если вы хотите прочитать (или принимать входные) массив символов затем использовать fgets. Для char a[5] сделать что-то вроде:

fgets (a, 5 , stdin) 

Поскольку fgets является безопасным буфером.

+2

'& a' тоже не прав. –

+0

Его тип отличается, но он возвращает то же значение. – Sadique

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