我正在尝试将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,这没用。
谢谢!
答案 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");
}