C: Как остановить цикл при получении конца ввода с клавиатуры или файла при использовании scanf по одному символу за раз - PullRequest
0 голосов
/ 14 мая 2018
void main(void)
{
    char character;

    do {
        scanf("%c", &character);
        printf("%c", character);
    } while (character != EOF);
}

Я собираюсь обработать вводимый символ за символом, и мне разрешено использовать только scanf (). Однако цикл while не останавливается. Поскольку мне может потребоваться обработать ввод многострочными строками, невозможно добавить еще одно условие: символ! = '\ N'. Может ли кто-нибудь помочь мне с этой проблемой? Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

У вас неверное ожидание. Когда scanf() встречает конец ввода перед тем, как сопоставить элемент ввода или распознать сбой сопоставления, он возвращает EOF. Ни при каких обстоятельствах он не изменяет значение базы данных, связанной с элементом ввода, который не был сопоставлен.

Вы игнорируете возвращаемое значение scanf, что обычно опасно, и вместо этого проверяете, записывает ли scanf запись EOF в объекте, связанном с элементом ввода, что в вашем конкретном случае оно не должно когда-либо делать.

0 голосов
/ 14 мая 2018

Для начала это должно быть int main...

Также вам необходимо проверить возвращаемое значение от scanf - пожалуйста, прочитайте страницу руководства.

Принимая это во внимание, коддолжно выглядеть так

#include <stdlib.h>
#include <stdio.h>
int main()
{
    char character;

    while (scanf("%c", &character) == 1) {
       if (character != '\n) {
         printf("%c", character)
       }
    }
    return EXIT_SUCCESS;
}
...