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

使用scanf动态获取数组元素后无法输出问题排查求助

使用scanf动态获取数组元素后无法输出问题排查求助

我来帮你梳理下代码里的问题,你的核心思路没问题,但几个细节导致程序没输出:

  • 输入结束的触发方式不对:scanf返回-1(也就是标准里的EOF)的前提是你输入了结束信号——Windows系统要按Ctrl+Z,Linux/macOS则是Ctrl+D。如果只是输入数字后按回车,程序会一直卡在循环里等待新的输入,根本走不到后面的printf代码。

  • 输出没有分隔符,容易被忽略:就算程序走到了输出步骤,你写的printf("%d", arr[j]);会把所有数字连在一起输出(比如输入1、2、3会输出123),可能你误以为没输出。建议给每个数字加个空格或者换行,让输出更直观。

  • 隐藏的数组越界风险:你定义的arr[1000]是固定大小的数组,如果输入超过1000个元素,会触发数组越界,这是未定义行为(可能崩溃或乱码),虽然不是当前没输出的原因,但必须注意。

我给你调整了代码,修复了这些问题:

#include <stdio.h>

int main() {
    int arr[1000], input_num, count = 0;
    // 用1表示死循环,比89更易读;用EOF替代-1,语义更清晰
    while (1) {
        // 读取输入,判断是否到达结束
        if (scanf("%d", &input_num) == EOF)
            break;
        // 加入数组越界检查,避免程序崩溃
        if (count >= 1000) {
            printf("警告:数组已满,无法再输入更多元素\n");
            break;
        }
        arr[count] = input_num;
        count++;
    }
    // 输出每个元素,用空格分隔,最后加换行
    for (int j = 0; j < count; j++)
        printf("%d ", arr[j]);
    printf("\n");
    return 0;
}

测试的时候,输入几个数字后按下对应的结束键,程序就会退出循环并输出所有输入的内容了。

如果你真的需要完全动态的数组(不局限于1000个元素),可以用malloc和realloc实现动态扩容,示例代码如下:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *arr = NULL;
    int input_num, count = 0, capacity = 0;
    while (scanf("%d", &input_num) != EOF) {
        // 当当前元素数量达到容量时,扩容(初始容量设为4,之后每次翻倍)
        if (count >= capacity) {
            capacity = (capacity == 0) ? 4 : capacity * 2;
            int *temp = realloc(arr, capacity * sizeof(int));
            // 检查内存分配是否成功
            if (!temp) {
                printf("错误:内存分配失败\n");
                free(arr);
                return 1;
            }
            arr = temp;
        }
        arr[count++] = input_num;
    }
    // 输出元素
    for (int j = 0; j < count; j++)
        printf("%d ", arr[j]);
    printf("\n");
    // 记得释放动态分配的内存,避免内存泄漏
    free(arr);
    return 0;
}

备注:内容来源于stack exchange,提问作者JAISHREEDEVAKI T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:24:37