Несколько вопросов. Во-первых, ваш inputArrayBuffer должен быть массивом char
, а не массивом int
. Во-вторых, есть стандартные C библиотеки, которые включают в себя то, что вы хотите сделать.
Вопрос 1: «Есть ли лучший способ запрограммировать это, которое позволило бы мне фиксировать время нажатия клавиш?"
Да. Для чтения stdin
до тех пор, пока не будет встречена новая строка или максимальная длина, функция fgets
из stdio.h
работает нормально (хотя могут существовать альтернативы). Что-то вроде
fgets(inputArrayBuffer, BUFFERSIZE, stdin)
Я так понимаю, вы хотите знать количество ключей, введенных пользователем, не включая клавишу новой строки. По сути, это длина строки. Более простой способ добиться этого - просто определить длину строки, введенной пользователем. Что-то вроде
keyPress = strlen(inputArrayBuffer) - 1; // -1 because the newline '\n' is included in strlen if you use fgets
Если вы должны захватить один символ за раз, тогда исходный код, который вы предложили, должен работать, просто обязательно определите inputArrayBuffer как char inputArrayBuffer[BUFFERSIZE];
Вопрос 2: «И почему условие BUFFERSIZE в то время как l oop не выходит из l oop?»
Это определенно должно выходить из l oop. Но не путайте bufferExceptionFlag
, равное 1, со значением, означающим, что keyPress < BUFFERSIZE
не привело к поломке l oop. Ясно, что когда вы ++keyPress
внутри l oop, если keyPress
имеет значение 99, тогда оно станет 100, что приведет к установке bufferExceptionFlag
. Однако на следующей l oop итерации keyPress < BUFFERSIZE
будет ложным, а l oop сломается.
На мой взгляд, это более простое и подходящее решение.
#include <stdio.h>
#include <string.h>
#define BUFFERSIZE 100
int main(void) {
char inputArrayBuffer[BUFFERSIZE];
unsigned long keyPress = 0;
printf("\n\t\t\t->"); /* Prompt */
fgets(inputArrayBuffer, BUFFERSIZE, stdin);
keyPress = strlen(inputArrayBuffer) - 1; // -1 because the newline '\n' is included in strlen if you use fgets
printf("User entered: %s\n", inputArrayBuffer);
printf("Input length: %lu\n", keyPress);
return 0;
}
Обратите внимание, что fgets включает символ новой строки в считываемой строке. Чтобы удалить этого символа, вы можете сделать что-то вроде inputArrayBuffer[keyPress] = '\0';