C语言教室面积判定程序scanf仅能输入2次就中断问题咨询
故障原因
核心触发崩溃的原因是scanf()函数的传参错误:
- C语言中
scanf()接收整数等基础类型输入时,需要传入变量的内存地址,才能把用户输入的值写入对应的变量存储空间。你的代码中三次scanf调用都直接传入了变量名length、width、n,没有添加取地址符&,程序会把变量的随机初始值当做内存地址,尝试写入输入值时触发非法内存访问,直接崩溃中断,所以无法进入第三个输入环节。
另外代码还存在两处隐含逻辑问题:
- 当教室面积不足时,计算得到的
square = 面积 - 所需面积是负数,输出差值时会显示负号,不符合输出正差值的要求 void main()不是C语言标准规定的主函数写法,部分编译器会抛出编译错误
修复方案
以下是修正后的完整代码:
#include<stdio.h> #include<stdlib.h> // 引入abs()函数用于取绝对值 int main() { // 声明变量 int length, width, n, area, square; printf("\nEnter room length:"); scanf("%d", &length); // 增加取地址符& printf("\nEnter room width:"); scanf("%d", &width); // 增加取地址符& printf("\nEnter number of students:"); scanf("%d", &n); // 增加取地址符& area = length * width; printf("\nArea is %d\n", area); square = area - n * 10; if (area > n*10) { printf("Room is too large by %d square feet\n", square); } else if (area < n*10) { // 差值取绝对值保证输出正数 printf("Room is too small by %d square feet\n", abs(square)); } else { printf("Room size is just right\n"); } return 0; }
主要修改点:
- 三次
scanf调用的变量参数前都添加了取地址符&,解决内存访问错误导致的崩溃问题 - 主函数改为标准的
int main()写法,末尾添加return 0;符合C语言规范 - 引入
<stdlib.h>头文件,在面积不足时调用abs()取差值的绝对值,保证输出正差值 - 所有输出语句末尾添加换行符,避免终端输出格式错位
内容的提问来源于stack exchange,提问作者Roselyne
相关产品推荐
相关产品推荐

