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

C语言用for循环搭配scanf读取n个整数仅扫描1次就终止问题求解

错误原因
  • 核心错误是对scanf的功能理解有误:scanf的返回值是成功匹配并赋值的输入项数,不是用户输入的数值本身。你最初版本的代码n=scanf("%d");没有给%d匹配对应的变量地址参数,首先触发未定义行为,其次如果用户输入1个整数,scanf会返回1,直接把n赋值为1,所以后续循环只会执行1次,该问题和换行符完全无关。
  • 你修改后的代码依然存在参数错误:scanf("%d, &n");把变量地址&n写到了格式串的双引号内部,导致scanf没有接收到存储输入值的地址参数,同样无法把用户输入的数量正确赋值给n,属于函数调用语法错误。
修复后的可运行代码
int scanEx(){
    int n=0; 
    // 正确写法:格式串单独作为第一个参数,存储输入值的变量地址作为后续参数
    scanf("%d", &n);
    // 注意:变长数组VLA是C99特性,若编译器不支持可改用malloc动态申请内存
    int arr[n];
    for (int i = 0; i < n; i++){
        printf("Enter a Number \n");
        scanf("%d", &arr[i]);
        // %d转换说明默认会跳过前面的所有空白符(包括换行、空格、制表符),不需要额外加前导空格也能正常运行
    }
    for (int i = 0; i < n; i++){
        printf("%d ", arr[i]);
    }
    // 函数声明为int返回值,补充return语句避免编译警告
    return 0;
}
补充说明

%d格式符本身就会自动忽略输入前的所有空白字符,不需要特意在格式串前加空格也能正常读取,你之前遇到的问题完全是scanf的参数和返回值使用错误导致的,和输入缓冲区残留的换行符无关。

内容的提问来源于stack exchange,提问作者Rack Cloud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:39:00