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

能否像定义赋值字符串数组那样同时定义并赋值整数数组?

问题解答:能否像字符串数组那样一次性定义并赋值整数数组?

明确结论:不能直接用你尝试的int scores[] = get_int(...)方式实现,核心原因在于C语言的数组初始化规则,以及CS50库中get_string和get_int的本质差异:

为什么字符串的写法可行?

CS50里的string是char*的别名,get_string函数会在内部动态分配内存存储用户输入的字符串,然后返回指向这段内存的指针。你写的string word = get_string(...)本质是把指针赋值给指针变量,并非直接初始化栈上的静态数组。

为什么整数数组的写法编译报错?

int scores[]声明的是栈上的静态数组,C语言规定这类数组的初始化只能用初始化列表(比如int scores[] = {1,2,3})或者宽字符串字面量,不能用函数返回值来初始化。再加get_int本身只返回单个整数,并非数组指针,这就触发了编译器的初始化规则报错。

替代实现方案

如果想实现类似字符串的“定义+批量赋值”逻辑,可以用动态分配内存的方式,结合CS50的输入函数完成:

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

int main()
{
    // 先获取数组长度
    int n = get_int("Enter number of scores: ");
    // 动态分配整数数组内存
    int *scores = malloc(n * sizeof(int));
    
    if (scores == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }
    
    // 逐个获取分数
    for (int i = 0; i < n; i++) {
        scores[i] = get_int("Enter score %d: ", i+1);
    }
    
    // 打印数组内容
    printf("Your scores:\n");
    for (int i = 0; i < n; i++) {
        printf("%d\n", scores[i]);
    }
    
    // 释放动态分配的内存
    free(scores);
    return 0;
}

这里的int *scores是指针,和string的本质一致,都是指向动态分配内存的指针,间接实现了类似字符串的使用逻辑。

另外你提供的for循环初始化静态数组的写法是可行的,但需要修正两处笔误:

#include <stdio.h>
#include <cs50.h>

int main()
{
    int scores[3];

    for(int i = 0; i < 3; i++)
    {
        scores[i] = get_int("Enter score: ");
    }

    for(int j = 0; j < 3; j++)
    {
        printf("%d\n", scores[j]);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:30:31