2016-04-08 3 views
1

Когда я не включаю пробел между спецификациями% d и% c в строке формата функции scanf в следующей программе и даю ввод во время выполнения как «4 ч», тогда выход «Integer = 4 и Character =.Пробел перед спецификацией% c в спецификаторе формата функции scanf в C

Как именно переменная« c »берет ввод в этом случае и какая разница, если я включаю пробел между% d и% с спецификацией?

#include<stdio.h> 
main() 
{ 
char c; 
int i; 
printf("Enter an Integer and a character : \n"); 
scanf("%d %c",&i,&c); 
printf("Integer = %d and Character = %c\n",i,c); 
getch(); 
} 

ответ

1

пространство перед тем %c спецификатора в scanf инструктировать его пропустить любое количество белых пространств. в другие слова, считанные со стандартного ввода до тех пор, пока не будет найден символ небелого пробела или прерывание клавиатуры.

+1

Это означает, что если я не использую пробелы между спецификациями% d и% c, то при вводе как «4 часа» компилятор устанавливает «пробелы» в переменную char «c» Я прав? ? –

+0

@ Shubhamdubey2111; Да. В точку. – haccks

+0

Большое спасибо за вашу помощь. –

3

Если вы внимательно прочитали спецификацию для scanf(), большинство спецификаторов формата пропускают ведущее белое пространство. В стандартном C, есть три, которые не:

  • %n - сколько символов были обработаны до этого момента
  • %[…] - сканирование устанавливает
  • %c - читать символ.

(POSIX добавляет четвертый, %C, что эквивалентно %lc.)

ввода пробельные символы (как определено isspace) должен быть пропущен, если спецификация преобразования не включает в себя [, c, C, или n спецификация преобразования.

Добавление пространства между %d и %c означает, что дополнительный пробел пропускается после того, как целое число считывается и до того, как (не белое пространство) характер читается.

+0

Кроме того, включение/исключение пробела не влияет на программу, если в игре играют два целых числа вместо символа и целого числа. Почему? –

+1

@ Shubhamdubey2111 Ответ на вопрос: «Если вы внимательно прочитали спецификацию scanf(), большинство спецификаторов формата ** (например,% d) ** пропустите ведущее белое пространство. В стандарте C есть три, которые не имеют значения:« – chux

+0

Okk .. Теперь я получил это. Спасибо. –