2013-10-05 2 views
0
char keyin, buffer[1024]; 
do 
{ 
keyin=gets(buffer); 
} 
while (keyin != "\n"); 

Я пытаюсь написать функцию паузы на C, где пользователь выходит из приостановленного состояния, нажимая клавишу Enter. Когда пользователь записывает «паузу», и эта функция выполняется. Некоторое время я работаю над этой функцией, и это ускользает от меня. Я реализовал код несколькими способами, и никто из них не работает. Я подозреваю, что это потому, что сравнение «\ n» с ключом. Я думаю, что \ n "не переводит непосредственно на ключ ввода.Функция паузы в C не отвечает на ввод ключа

+1

попробуйте простые кавычки для возврата каретки: '\ n' – ylabidi

+3

Обратите внимание на предупреждения компилятора, или если вы их не получили, включите уровни предупреждений. 'gets()' не возвращает символ 'char'. – FatalError

+0

Пробовал, не повезло. – cleong

ответ

2

Вам не нужен цикл while, чтобы ждать нажатия клавиши Enter. Он будет ждать (и вы можете нажать любую клавишу) пока вы не нажмете Enter: http://en.cppreference.com/w/c/io/gets

Но вы должны зарезервировать много места - то, что если кто-то держит, нажав любую другую клавишу «пока что-то происходит»? Буфер переполнится, и ваша программа (скорее всего) выйдет из строя.

Возможно, вы захотите использовать getchar - это пошлет один keypress за один раз назад.

Примечание: клавиша Enter обычно отправляет код ASCII 13 (0x0D), а не 10 (0x0A). Вместо этого вы могли бы использовать '\ r' (учитывая замечания других о символе «против» или «строка»!) Или предотвратить всю путаницу и использовать значение hex или dec.

Это отличается от поведения «\ n», к которому вы привыкли при выводе, поскольку только определенные функции будут расширять или преобразовывать код «\ n» в текст в требуемую последовательность конца строки для вашей ОС ,

+0

Это сработало! Кроме того, я ценю информативный ответ. Ты обалденный. – cleong

+0

Никогда не предлагайте использовать 'gets' для чтения пользовательского ввода. Это огромный риск для безопасности. –

1

Вы не можете сравнивать строки с == или != в C. Вы должны сравнить содержимое строк с помощью функции, как strcmp (или, предпочтительно, один из самых безопасных вариантов), например:

while (strcmp(keyin, "\n") != 0); 

As В любом случае, вы никогда не должны использовать gets. Безопасное и безопасное использование невозможно.

+0

, конечно, в случае простого сравнения символов, 'if (keyin [0] == '\ n')' также будет достаточно. – mikebabcock

+0

Это правда, спасибо за указание на это, но функция еще не сработала. – cleong

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