2010-10-26 3 views
2

я имею проблемы с этим с кодом языка:Второй зсапЕ не работает

char st[2]; 

printf("enter first value:"); 
scanf("%c", &st[0]); 

printf("enter second value:"); 
scanf("%c", &st[1]); 

Так что мой компьютер не просил меня, чтобы ввести второе значение, я хочу сказать, что это только напечатать первый printf Затем я вводим символ, а затем он печатает только второй оператор printf и конец программы без ввода второго ввода.

Пожалуйста, помогите. Что случилось с этим кодом?

-Спасибо заранее.

+1

Возможный дубликат: http://stackoverflow.com/questions/1669821/scanf-skips-every-other-while-loop-in-c – Alam

+0

Это должен быть день для вопросов 'scanf'. [Такая же проблема, как это] (http://stackoverflow.com/questions/4016073/scanf-fails-why), я думаю. []() –

ответ

8

Хорошо. Символ (ы), созданный клавишей ENTER, уже присутствует в буфере.

+0

+1 Мне нужно научиться вводить быстрее: D – nathan

3

Я думаю, что ваша проблема в том, что второй scanf получает нажатие клавиши «Enter».

+0

+1 от меня, ты был всего лишь 12 секунд позади меня :) – leppie

3

Вы получаете неявную новую строку, введенную вами в качестве второго символа, то есть st[1] получает значение '\n'. Самый простой способ исправить это включить символ перевода строки в ожидаемой строке формата: scanf("%c\n", &st[0]);

2

Изменение

scanf("%c", &st[0]); 

к этому

scanf(" %c", &st[0]); 

Это Дыродел ответ (нет проверки ошибок или что-нибудь) но его быстро и легко.

0

использование fflush(stdin); функция перед вторым scanf();. Он очистит клавишу ENTER, сгенерированную после первого scanf() ;. На самом деле, ваш второй scanf() принимает ENTER как свой вход, и поскольку scanf завершается после получения ENTER, он не принимает ничего другого на вашей стороне.

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