2015-02-13 2 views
1

Я написал следующую функцию (пока я читал книгу Ritchie на C), чтобы получить одну строку из командной строки. Он делает то, что он должен делать, и я понимаю, как это работает, но я хотел копать немного глубже.getchar() и кнопка ввода, понимающая, как это работает

int getLine(char arr[], int max) { 
    int c, i; 
    for (i = 0; i < max - 1 && (c = getchar())!= EOF && c!= '\n'; ++i) { 
     arr[i] = c; 
    } 
    if(c == '\n') { 
     arr[i] = c; 
    } 
    arr[i+1] = '\0'; 
    return i; /*length without '\n'*/ 
} 

мой вопрос о петле, скажем, у нас есть пустая командная строка, и она ждет пользователя вводить что-то, потому что первый GetChar() вызывается в цикле, давайте скажем, что пользователь ввел следующее:

h 

Моего предположение о том, что происходит потом, что GetChar() магазины, «з» в обрах [] без пользователь на самом деле нажимая клавишу вВОДА.

так что если пользователь держит набрав:

hello 

«ч» «е» 'л «л» и «о» будет храниться в обрах [] без пользователь фактически нажав ввод и GetChar будет были вызваны в общей сложности 6 раз, последний из них был после «o». И затем, когда пользователь нажимает enter, getchar() будет хранить '\ n' в arr [], правильно? Это точно, как это работает? Так что я думаю, вопрос

. Getchar() необходимо ввести, чтобы сделать то, что он делает?

благодаря

+1

Научитесь использовать отладчик и переходите через код по строкам, наблюдая за всеми задействованными переменными. –

+0

спасибо, я попробую, – Gravity

ответ

0

getchar() не возвращает ничего, пока вы не смывать вход, для которого вы должны нажать Enter/Return или вставить EOF, на Linux терминал, который достигается нажатием Ctrl + D и оконная консоль Ctrl + Z сделают это.

+0

спасибо, но даже если он ничего не возвращает, он все еще называется и все еще выбирает письмо вверх, я прав, потому что он должен называться снова и снова – Gravity

+2

Да, он возвращает каждый характер по очереди. Но только после того, как он получит буфер. Помните, что C был создан на/для компьютеров с серийными TTY. –

+0

Я бы проголосовал, но у меня не хватило репутации: D – Gravity

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