我试图将stdin的fgets输入检测为空(当我按下enter而不输入任何内容时).这是我的计划:
int main()
{
char input[1000];
printf("Enter :");
fgets(input, 1000, stdin);
input[strlen(input) - 1] = '\0';
if(input != '\0'){
printf("hi");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想做某种条件,使它不打印任何东西,但显然这种方式是不对的.我也试过NULL,这没用.
谢谢!
我认为这是最可读的(但不是高性能):
if (strlen(input) != 0) {
printf("hi");
}
Run Code Online (Sandbox Code Playgroud)
但是为了教学,这里是你的风格,但随后修复:
if (input[0] != '\0') {
printf("hi");
}
Run Code Online (Sandbox Code Playgroud)
为什么input[0]?因为input如果你比较它就像指向数组的第一个元素的指针,你首先必须取消引用它以使比较有用.
明显的方法是这样的:
if (input[0] != '\0')
printf("hi");
Run Code Online (Sandbox Code Playgroud)
尽管 usingstrlen 可以工作,但它可能相当浪费——它将 O(1) 操作变成了 O(N) 操作。
当然,您几乎总是希望首先检查返回值fgets。然后,如果它说它成功读取了某些内容,则您检查内容以确保它不为空。
这是一个捕捉大部分可能发生的情况的快速演示:
if (input[0] != '\0')
printf("hi");
Run Code Online (Sandbox Code Playgroud)
[注意:我已将输入大小从 1000 个字符缩短到仅 10 个字符,因此很容易看到当您输入的输入内容多于允许fgets阅读的内容时会发生什么情况。]