2016-12-05 4 views
-1

Программа продолжается, только если пользователь нажимает «Enter» в двух случаях. Но моя программа не ждет, пока пользователь нажмет «Enter» и перейдет к следующей строке кода.Почему моя программа не ждет нажатия клавиши («Enter») в C

int T1 ,T2; 
    char c1,c2; 
    printf("Enter Temperature T1: "); 
    scanf("%d",&T1); 
    printf("Enter Temperature T2: "); 
    scanf("%d",&T2); 
    printf("Press Enter after setting temperature T1\n"); 
    scanf("%c",&c1); 
    while(c1 != '\n' && c1 != EOF); 
    printf("Press Enter after setting temperature T2\n"); 
    scanf("%c",&c2); 
    while(c2 != '\n' && c2 != EOF); 
+0

Использование fgets для чтения с клавиатуры, atoi для конвертирования с. scanf хранит ENTER также в буфере (stdin), буфер распределяется между вызовами scanf –

+1

Поскольку клавиши Enter, которые вы нажали после того, как числа помещены во входной буфер как новые строки, которые будут читать форматы ''% c ''. –

+2

'scanf ("% c ", &c1);' -> 'scanf ("% c ", &c1);' (обратите внимание на пробел) – artm

ответ

0

Во-первых, сделать один пробел перед %c(scanf(" %c",&c1);), потому что формат без заготовки читает следующий символ, даже если это белое пространство, в то время как один с пустыми скачет пробелами (включая переводы строк) и читает следующий символ это не пустое пространство.

Во-вторых, цикл while, следующий после scanf, который я упомянул выше, повесит ваш код, поэтому сделайте его комментируемым, если вы хотите выполнить второй оператор printf.

+0

Итак, я добавил пространство до% c и переписал цикл while while (c1! = '\ n'); Теперь мой код зависает. Что мне делать? Спасибо – rdx1994

+0

Просто прокомментируйте цикл while. Программа Ur будет работать успешно. –

+0

Он все еще висит. Я действительно не знаю, что делать. – rdx1994

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