c - 在 C 中使用 scanf() 的空条目的默认值
问题描述
我正在查看来自研究站点的以下 C 代码,并想确认带有 scanf("%d", number ) 的空条目的默认值是否为-1?. 也就是说,如果“数字”是一个“空条目”,它会自动被解释为 -1 吗?
如果空条目不被理解为 -1,下面的代码如何不运行“do”部分中的第一个 if 语句(增量计数器)?
int main(void)
{
int number;
int max = -100000;
int counter = 0;
do {
scanf("%d",&number);
if(number != -1)
counter++;
if(number > max)
max = number;
}
while (number != -1);
if(counter)
printf("The largest number is %d \n",max);
else
printf("Hey, you haven't entered any number!");
return 0;
}
解决方案
没有“默认值”之类的东西scanf
。如果scanf
失败,则不会对指向的对象进行分配。
所以代码的想法是循环将继续,直到用户输入 a -1
。
该代码缺少对来自 的返回值的检查scanf
,即,而不仅仅是
scanf("%d",&number);
代码应该像
if (scanf("%d",&number) != 1)
{
// Invalid input
// Add error handling or just exit
exit(1);
}
推荐阅读
- android - 谷歌云平台暴露密钥
- amazon-web-services - AWS SAM 部署错误 - 验证错误 | CreateChangeSet 操作错误
- sql-server - 如果在给定的日期时间为空,则获取最后一个值
- amazon-redshift - UNION 查询 Redshift 性能不佳
- xaml - 应用程序背景的 Xamarin 徽标背景
- xjc - org.jvnet.jaxb2_commons:jaxb2-basics 的替代品
- python - 在 python 3.8 中进行语音识别(JARVIS)时出错
- javascript - 如何在特定时间点中断异步功能
- amazon-web-services - AWS Java SDK Cloudformation 无法按名称或 Id 描述堆栈
- javascript - ExpoLocalAuthentication 反应本机错误