2014-11-21 2 views
-3

Это не сканирование символа после успешной проверки строки при программировании c.Почему я не могу сканировать символ% c?

char s[10],c; 
scanf("%s",s); 
scanf("%c",&c); 
printf("%s\n",s); 
printf("%c",c); 
+4

Что происходит? Что вы ожидаете? Что ты видишь вместо этого? Какой ответ вы ожидаете? – glglgl

+1

Этот вопрос задается ежедневно, и, учитывая количество проблем, которые он дает новичкам, его следует воспринимать всерьез. По крайней мере, предоставить и ответить или провести двойное голосование. – 2501

+0

Возможно, компилятору не понравилось то, что вы написали. Вот почему он не сканировал. – barnes

ответ

4

scanf эксплуатации:

спецификатор C:

соответствует последовательности символов, длина которых определяется максимальная ширина поля (по умолчанию 1); следующий указатель должен быть указателем на char, а должно быть достаточно места для всех символов (не добавляется нулевой байт ). Обычный пробел ведущего пробела подавляется. В сначала пропустите пробел, используйте явное пространство в формате.

Таким образом, измените формат на " %c".

1

Это

char s[10],c; 
scanf("%s",s); 
scanf("%c",&c); 
printf("%s\n",s); 
printf("%c",c); 

не будет работать, как задумано, потому что, когда вы используете scanf("%s",s); вы ввести строку с клавиатуры нажмите клавишу ВВОД. То, что scanf("%s",s); сохранит строку в s из буфера, но даст enter или точнее \n в буфере. Следующий scanf("%c",&c); будет читать, что \n, потому что это 1 символ длиной и сохранит его в c. Но когда вы его печатаете, вы ничего не увидите, потому что это просто новая строка. Чтобы предотвратить все это изменение, второй scanf("%c",&c); с scanf(" %c",&c);, оставляя место для \n.

Надеюсь, это поможет вам понять, что происходит.

+1

«Но когда вы его печатаете, вы ничего не увидите, потому что это просто новая строка» - OP ничего не увидит, OP увидит новую строку. – zoska

0

После ввода символов для строки 'вы вводите ввод' \ n 'следующее сканирование для символа захватывает новую строку и печатает ее. что вы можете сделать, захватите эту новую строку '\ n'. Поместите scanf ("% c", & c); еще раз это сработает.

char s[10],c; 
`scanf("%s",s);` 
`scanf("%c",&c);` 
`scanf("%c",&c)` 
`printf("%s\n",s);` 
`printf("%c",c);` 
Смежные вопросы