如何从fgets中检测空字符串

时间:2011-11-08 23:55:24

标签: c input fgets

我正在尝试将stdin的输入从stdin检测为空(当我按下enter而不输入任何内容时)。这是我的计划:

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 个答案:

答案 0 :(得分:6)

我认为这是最具可读性(但不具备性能):

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

但是为了教学,这里是你的风格,但后来修好了:

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

为什么input[0]?因为input就像一个指向数组第一个元素的指针,如果你比较它,你首先必须取消引用它以使比较有用。

答案 1 :(得分:3)

当按下返回键时,

fgets将返回'\ n';这使得总字符串“\ n \ 0”。您可以使用此值进行字符串比较,但更强大的解决方案是“剥离”或“修剪”字符串以删除所有前导和尾随空格(在任何处理之前您应该执行此操作),然后检查空字符串。

最简单的修改是检查(*input!='\n')。我应该注意,这还要求你删除空终止代码,它删除了这个换行符(大概是设计)。

答案 2 :(得分:2)

显而易见的方式是:

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

虽然使用strlen 工作,但这可能非常浪费 - 它会将O(1)操作转换为O(N)。

答案 3 :(得分:1)

为了安全起见,最好使用它:

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