You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:30:02