gpt4 book ai didi

c - 通过 scanf 定义列表的大小

转载 作者:太空宇宙 更新时间:2023-11-04 07:19:43 25 4
gpt4 key购买 nike

我想编写一个程序,提示用户输入一个整数,并且我希望列表的大小恰好是该整数。这是我的尝试:

int main(void){

int target;
printf("Enter # of elements in list: ");
printf("\n");
scanf("%d", &target);


// Initialize List
int list[target];
// Code to populate list from 1 to target here

return 0;
}

我收到一条错误消息,指出大小争论必须是一个常数值,有没有办法解决这个问题,或者我是否被迫定义最大大小?

最佳答案

您可以在 C99(或更高版本)中执行此操作,但您的编译器可能默认设置为 C89/C90/ANSI-C。尝试在命令行中传递 -std=c99

如果您的编译器不支持 C99 模式,您将需要通过 malloc 使用动态分配:

int * list = malloc(target * sizeof *list);

你应该检查 list 是否不是 NULL,以防 malloc 失败并且不要忘记调用 free (list) 完成后!

请注意,您已将 list 定义为 int,并且您正在使用 scanf("%d") 读取它所以它可以是一个负值。这可能会导致一些 undesirable behaviour .因此考虑将声明更改为 size_t(mallocVLA's 期望的类型)。然后使用 %zu(如果 %zu 不可用,则使用 %u)而不是 %d 读取它.

最后,您应该检查 scanf 的返回值以确保您的值被正确读取,如果它少于您想要读取的值的数量(在您的情况下为 1),它将意味着该值未被读取并且您的 target 的内容保持不变。在您的情况下,target 将具有未定义的内容,因此如果用户未输入有效数字,您的程序将调用未定义的行为。

关于c - 通过 scanf 定义列表的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22288068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com