2014-02-20 4 views
1
char ch; 
ch=getch(); 
printf("%d",ch); 

Когда я вход enter key затем отображается выходотносительно inputing клавишу ввода

13 

Но ASCII-код для новой линии 10, так почему 13 отображается?

Следующий код работает бесконечное время на ввод enter key

char *ch=malloc(100); 
do 
{ 
    *ch=getch(); 
    ch++; 
}while(*(ch-1)!='\n'); 
+0

'getch' является нестандартным и не переносным. Вместо этого используйте 'getchar'. – ajay

ответ

2

В некоторых системах, «Enter» действительно два символа: возврат каретки с последующим переводом строки.

+0

Если это так, то как проверить состояние '' \ n'' – zee

+0

@zee После прочтения вашего обновления и, как упоминалось Павлом, getch является нестандартным. Если вы действительно должны использовать его, то вы уже знаете, что он возвращает return '' \ r'' на «Enter», поэтому вместо этого проверьте это. Если нет, вы всегда можете использовать getchar(). – Allbeert

1

Конец-линии всегда представлена ​​'\n' в C, независимо от того, представляет ли основная система как \n, \r или \r\n, или что-то еще. Значение '\n', вероятно, 13 в вашей системе.

C не требует ASCII, но ASCII имеет символ возврата каретки и символ линии. Не используйте числовые значения для любого из них, так как C не требует ASCII - всегда используйте символьный литерал '\n' для переносимости.

getch() не является стандартной функцией C, поэтому кто знает, что вы пытаетесь с ней сделать, но при использовании стандартной библиотеки ввода-вывода C вы тестируете конец строки, а не для некоторых конкретных например Введите, и вы сделаете это, проверив для '\n'. Очевидно, что если вы используете эти функции в файле, не будет смысла говорить о клавишах.

+0

проверить мой обновленный вопрос, и вы узнаете, что я пытаюсь сделать с помощью 'getch()' – zee

+0

Что я имею в виду, я понятия не имею, что делает 'getch()' или как это работает, поскольку это не стандартная функция C , и вы не даете никаких подробностей об этом. Возможно, это не сработает для вас, потому что эта функция вообще не читает персонажей, насколько я знаю. –

+0

то что он делает? – zee

1

Я предполагаю, что вы используете ОС Windows. Когда вы нажимаете , введите ключ, затем '\r' символ, также называемый carriage return или CR, считывается функцией getch. См. key-codes. Вы сравниваете это с символом новой строки '\n', который, очевидно, оценивается до false, и вы продолжаете цикл. Таким образом, вы должны сделать это вместо того, чтобы:

char *ch = malloc(100); 

// check ch for NULL 
do { 
    *ch = getch(); 
    ch++; 
} while(*(ch-1) != '\r'); // compare with carriage return 

ASCII значение '\r' является 13 и что объясняет свой вывод. getch функция не стандартная и не переносная. Кроме того, он устарел. Вместо этого вы должны использовать стандартную функцию getchar. Кроме того, прочтите это: Why doesn't pressing enter return '\n' to getch()?

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