为何不能将scanf()与变量声明写在同一行?
为什么不能把scanf()函数与变量声明语句写在同一行?
这种写法存在两个核心问题:
scanf的返回值不是你需要的输入数值
scanf()的返回值是成功读取的输入项数量:输入有效整数时返回1,输入无法解析成整数的内容(比如字母)时返回0,遇到输入结束(如Ctrl+D)则返回EOF。把这个值赋值给number,完全得不到你想要的用户输入的整数,属于逻辑错误。初始化阶段取变量地址属于未定义行为
在int number = scanf("%d", &number);这行代码里,number还处于初始化过程中,此时获取它的地址&number并传给scanf,属于C标准定义的未定义行为——编译器没有义务保证这段代码的行为符合预期,可能出现读取失败、内存错误甚至程序崩溃等不可控结果。
正确的写法应该分开声明变量和调用scanf:
int number; // 先完成变量声明,再用它的地址传参给scanf scanf("%d", &number); // 更严谨的写法可以判断返回值,处理输入错误 if (scanf("%d", &number) != 1) { printf("输入无效\n"); // 可添加错误处理逻辑 }
内容的提问来源于stack exchange,提问作者Kar Lee
相关产品推荐
相关产品推荐

