2016-10-30 4 views
-1
void clrKyb(void) 
{ 
    char c[30]; 

    scanf("%s",c); 

    for(int i = 0; i < 30; i++){ 
     if(c[i] == '\n'){ 
      i = 30; 
     } 
    } 
} 

void pauses(void) 
{ 
    printf("Press <ENTER> to continue:"); 
    clrKyb(); 
} 

Здравствуйте, я застрял в своей функции «паузы». Нажатие ENTER для продолжения не работает?C - Нажмите Enter для продолжения?

+0

'% s' пытается прочитать слово. Если вы просто нажмете Enter, слова нет, поэтому он будет продолжать ждать. – Barmar

+0

'scanf' небезопасно. Вместо этого используйте 'scanf_s'. https://msdn.microsoft.com/en-us/library/w40768et.aspx – Dai

+0

@ Дай: Разве это не касается Microsoft? –

ответ

3

Просто используйте getchar(), он возвращает первый символ, считанный с stdin, и ждет до ENTER.

#include <stdio.h> 
void clrKyb(void) { 
    while ((c = getchar()) != '\n' && c != EOF) {}; 
} 
void pause(void) { 
    printf("Press <ENTER> to continue."); 
    clrKyb(); 
} 

У меня такое чувство, что это домашнее задание. Пожалуйста, в следующий раз сообщите нам заранее, чтобы мы могли дать рекомендации, а не ответы.

+0

Мне тоже нужно прочитать что-то длиннее 1 символа. Например, «abcd». – user3013760

+0

@ user3013760 Но вам действительно нужен этот вход? Потому что ваш пример этого не делает. Эта функция способна обнаруживать более 1 символа и вводить, но возвращает только первый. вам не нужно проверять, является ли возврат getchar() «\ n», если он продолжается, вы знаете, что нажата клавиша ввода. – dshus

+0

Он возвращается в другие функции, которые все работают. Я только застрял на «паузах». Нажатие просто продолжается до конца кода. – user3013760

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