我试图检测从stdin输入的fgets为空(当我按回车键而没有输入任何东西时)。下面是我的程序:
int main()
{
char input[1000];
printf("Enter :");
fgets(input, 1000, stdin);
input[strlen(input) - 1] = '\0';
if(input != '\0'){
printf("hi");
}
return 0;
}
我想做一些条件,使它不打印任何东西,但显然这种方式是不正确的。
谢谢!
4条答案
按热度按时间cnh2zyt31#
我认为这是最具可读性的(但不是性能):
但为了教学起见这里是你的风格,但随后固定:
为什么是
input[0]
?因为input
的作用就像一个指针,指向数组的第一个元素,如果你像这样比较它,你首先必须取消引用它,使比较有用。erhoui1w2#
最明显的方式是这样的:
虽然使用
strlen
* 将 * 工作,但它可能非常浪费-它将O(1)操作变成O(N)。当然,您几乎总是希望首先检查
fgets
的返回值,然后如果它说它成功阅读了某些内容,则检查内容以确保它不是空的。下面是一个快速演示,可以捕捉到大部分可能发生的事情:
[Note:我已经将输入大小从1000缩短到只有10个字符,因此很容易看到当输入的内容超过
fgets
允许读取的内容时会发生什么。]bihw5rsg3#
fgets将返回一个'\n'当回车键被按下;这使得总字符串为“\n\0”。您可以使用此值进行字符串比较,但更可靠的解决方案是'strip'或'trim'字符串以删除所有前导和尾随空格(无论如何,您都应该在任何处理之前执行此操作),然后检查是否为空字符串。
最简单的修改是检查是否为
(*input!='\n')
。我应该注意到,这还需要您删除空终止代码,这会去掉这个换行符(大概是设计好的)。x9ybnkn64#
为了安全起见,最好使用这个: