c如果字符串为空,则退出

时间:2012-03-12 17:41:06

标签: c string

我有以下代码,如果提供的用户输入为空,则应该退出,即在被要求输入时按[ENTER]。但是,如果按下[ENTER],它什么都不做。

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

4 个答案:

答案 0 :(得分:4)

如果用户只按Enter键,则输入仍将包含换行符('\n')。你的病情应该是

if (!strcmp(str, "\n"))

答案 1 :(得分:2)

我使用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);

答案 2 :(得分:1)

带有%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保持不变。

答案 3 :(得分:0)

你不应该检查'\ n' - 新行吗? Enter将表示为新行字符'\ n'