能否像定义赋值字符串数组那样同时定义并赋值整数数组?
问题解答:能否像字符串数组那样一次性定义并赋值整数数组?
明确结论:不能直接用你尝试的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
相关产品推荐
相关产品推荐

