c Выход, если строка пуста - PullRequest
0 голосов
/ 12 марта 2012

У меня есть код ниже, который должен выйти, если предоставленный пользовательский ввод пуст, т.е. они нажимают [ENTER], когда запрашивается ввод.Однако он ничего не делает, если нажата [ENTER].

printf("Enter the website URL:\n");
scanf("%s", str);
if(strlen(str) == 0) {
    printf("Empty URL");
    exit(2);
}

Ответы [ 4 ]

4 голосов
/ 12 марта 2012

Если пользователь просто нажимает клавишу ввода, ввод будет по-прежнему содержать новую строку ('\n').Ваше состояние должно быть

if (!strcmp(str, "\n"))
2 голосов
/ 12 марта 2012

Я использую функцию isempty:

int isempty(const char *str)
{
    for (; *str != '\0'; str++)
    {
        if (!isspace(*str))
        {
           return 0;
        }
    }

    return 1;
}

Кроме того, я бы рекомендовал использовать fgets вместо scanf, так как scanf небезопасно и может привести к переполнению буфера.

fgets(str, /* allocated size of str */, stdin);
1 голос
/ 12 марта 2012

%s с scanf() отбрасывает все начальные пробелы, из которых он считает нажатие клавиши Enter. Если вы хотите иметь возможность принимать «пустую» строку, вам нужно будет принять ваш ввод другим способом, например, используя fgets():

printf("Enter the website URL:\n");
fgets(str, SIZE_OF_STR, stdin);
if(!strcmp(str,"\n")) {
    printf("Empty URL");
    exit(2);
}

Имейте в виду, что приведенный выше код не учитывает EOF, что оставило бы str без изменений.

0 голосов
/ 12 марта 2012

разве вы не должны проверять '\ n' - новую строку? Enter будет представлен в виде символа новой строки '\ n'

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