В массиве используется только первый символ пользовательского ввода - PullRequest
0 голосов
/ 11 мая 2019

Я пишу некоторый код для наноканала, что означает, что я не могу использовать стандартную библиотеку, хотя я реализовал функции для печати строк и получения символов с клавиатуры.

Прямо сейчас у меня настроена программа, которая берет символы с клавиатуры и помещает их в массив. Строка затем распечатывается. Я ожидаю, что распечатанная строка будет выглядеть точно так же, как введенная пользователем.

Проблема в том, что кажется, что единственный символ, помещаемый в строку, является первым символом, введенным на клавиатуре.

вот соответствующий код для помещения символов в массив:

void stringin(char str[]) { // takes a string, puts it in str
        int i = 0;
        for (i = 0; str[i] != '\n' && str[i] != '\033';) {
                str[i] = getch();
                if (str[i] != '\n' && str[i] != '\033') {
                        i++;
                }
                calctime(1000000); // waits for a bit so that we don't flood the array
        }
        if (str[i] == '\n') newline(1);
        str[i++] = '\0';
}

Я использовал как функцию печати, так и реализацию strcmp () для проверки содержимого строки, поэтому, кажется, ничего не происходит неправильно при печати строки.

1 Ответ

2 голосов
/ 11 мая 2019

На основании комментариев str передается в stringin с неинициализированным буфером.

Поскольку следующий цикл завершается на основе значения str[i] до фактической инициализации str[i], результаты не определены.

for (i = 0; str[i] != '\n' && str[i] != '\033';) {
    str[i] = getch();
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...