Получение строкового ввода в C, если не найдена пустая строка - PullRequest
1 голос
/ 30 сентября 2019

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

Это моя попытка, и я попробовал несколько разных способов, но у меня та же проблема. цикл продолжает работать, даже когда я ничего не ввожу.

Код

char string[100];

do{
    fgets(string,100,stdin);
} while (string[0] != '\0');

К сожалению, когда я запускаю этот выводвыглядит примерно так:

Вывод

> hello
> world
> test
>
>

Я также пытался использовать scanf() вместо fgets(), но та же проблемавсе еще там.

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Использование fgets довольно просто. В качестве функции вы можете проверить, чтобы увидеть, что вход содержит новую строку. Если нет, есть ожидающие символы.
scanf возможно с использованием набора сканирования. %99[^\n] будет сканировать до 99 символов, которые не являются новой строкой. %*c будет использовать новую строку. Если единственным символом является символ новой строки, тогда scanset завершится неудачно, и scanf вернет 0. Если введено более 99 символов, %*c будет использовать символ, который не является новой строкой. fgets не имеет этой проблемы.

#include <stdio.h>

int main ( void) {
    char string[100] = "";
    int result = 0;

    printf ( "using fgets\nenter a blank line to stop\n");
    do {
        fgets ( string, sizeof string, stdin);
    } while ( string[0] != '\n');

    printf ( "using scanf\nenter a blank line to stop\n");
    do {
        result = scanf ( "%99[^\n]%*c", string);
    } while ( result == 1);

    return 0;
}

Если ungetc, если scanf читает слишком много символов, последний символ может быть возвращен в поток, если он не является новой строкой.

    char last = 0;

    do {
        result = scanf ( "%99[^\n]%c", string, &last);
        if ( EOF == result) {
            fprintf ( stderr, "scanf EOF\n");
            return 0;
        }
        if ( '\n' != last) {
            ungetc ( last, stdin);
        }
    } while ( result == 2);
0 голосов
/ 30 сентября 2019

Вы можете использовать функцию strcmp, чтобы проверить, является ли ввод пустым:

char str[50];
while(strcmp(gets(str), "") != 0){
    printf("Output: %s\n", str);
}

strcmp функция возвращает 0, если обе строки идентичны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...