Ошибка с использованием пробела для обозначения конца строки - PullRequest
0 голосов
/ 28 февраля 2020

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

AB
CD

. Прямо сейчас мой подход заключается в сканировании по одному символу за раз. Если этот символ не является пробелом, я собираю его в строку (что может происходить несколько раз). Если этот символ является пробелом, распечатайте собранную строку. Но когда я ввожу echo -n (с входными данными), моя последняя собранная строка не будет напечатана, потому что нет пробелов. Могу ли я что-то сделать, чтобы решить эту проблему с небольшими изменениями, или мой подход совершенно неверный? Спасибо

Мой код следующий (я его немного сокращаю, моя оригинальная программа определяет символ, а функция возвращает -1, если это не символ A)

int main(void)
{
    int t = 1;
    char a;
    char pattern_collected[5001];
    int l = 0;

    while (t == scanf("%c", &a)) {
        if (isspace(a)) {
            for (int i = 0; i <= l; i++) {
                printf("%c", pattern_collected[i])
            }
            l = 0;
            memset(pattern_collected, 0x00, 5001);
        } else {
            pattern_collected[l] = 'A';
            l++;
        }
    }
    return 0;
}

1 Ответ

1 голос
/ 29 февраля 2020

Если ваши циклы ломаются из-за того, что на scanf() ничего не осталось, вам нужно проверить l. Если это не 0, ввод пропускает последний пробел, а затем выдает то, что собрано в pattern_collected.

...