Как обнаружить пустую строку из fgets - PullRequest
4 голосов
/ 09 ноября 2011

Я пытаюсь определить ввод fgets из stdin как пустой (когда я нажимаю ввод, не вводя ничего). Вот моя программа:

int main()
{
    char input[1000];
    printf("Enter :");
    fgets(input, 1000, stdin);
    input[strlen(input) - 1] = '\0';

    if(input != '\0'){
        printf("hi");
    }

    return 0;

}

Я хочу выполнить какое-то условие, из-за которого он ничего не печатает, но, очевидно, этот путь не верен. Я также попробовал NULL, который не работал.

Спасибо!

Ответы [ 4 ]

7 голосов
/ 09 ноября 2011

Я думаю, что это наиболее читабельно (но не по производительности):

if (strlen(input) != 0) {
    printf("hi");
}

Но ради обучения здесь ваш стиль, но затем исправлено:

if (input[0] != '\0') {
    printf("hi");
}

Почемуinput[0]?Потому что input действует как указатель на первый элемент массива, если вы сравниваете его таким образом, и сначала вы должны разыменовать его, чтобы сделать сравнение полезным.

3 голосов
/ 09 ноября 2011

fgets вернет '\ n' при нажатии клавиши возврата;это делает итоговую строку "\ n \ 0".Вы можете выполнить сравнение строк с этим значением, но более надежное решение состоит в том, чтобы «убрать» или «обрезать» строку, чтобы удалить все начальные и конечные пробелы (что вы должны сделать в любом случае перед любой обработкой), а затем проверить наличие пустой строки.,

Самая простая модификация - это проверка (*input!='\n').Должен отметить, что для этого также необходимо удалить код, заканчивающийся нулем, который удаляет этот символ новой строки (предположительно, по замыслу).

2 голосов
/ 09 ноября 2011

Очевидный способ будет выглядеть примерно так:

if (input[0] != '\0')
   printf("hi");

Хотя использование strlen будет работать, оно потенциально довольно расточительно - оно превращает операцию O (1) в O(Н).

1 голос
/ 09 февраля 2016

Чтобы быть в безопасности, лучше используйте это:

if(u_input[0] == '\n' && u_input[1] == '\0'){
    printf("hi");
}
...