gpt4 book ai didi

c - 程序在函数循环后停止

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:06 24 4
gpt4 key购买 nike

我的程序没有达到 outArray 功能。它在 fillArray 函数循环后停止。为什么会这样。它看起来很奇怪,因为它是简单的 void 函数,不应该返回任何东西。这应该继续在 main 中运行命令。并且像往常一样停止程序,没有任何问题和错误

#include <stdio.h>
#define N 100

int enterNofArray();
void fillArray(int n, float arr[N]);
void outArray(int n, float arr[N]);

int main()
{
float arr[N], sum = 0.0, average;
int n;

//input
n = enterNofArray();

//compute
fillArray(n, &arr[N]);

//output
outArray(n, &arr[N]);

return 0;
}


int enterNofArray()
{
int n;
printf("Enter amount of array...\n");
scanf("%d", &n);

while (n < 1 || n > N)
{
printf("Incorrect!!\n");
printf("Enter in range 1 - 100...\n");
scanf("%d", &n);
}

return n;
}

void fillArray(int n, float arr[N])
{
int num;
for(int i = 0; i < n; i++)
{
printf("Enter number for array[%d times left]...\n", n - i);
scanf("%d", &num);
arr[i] = num;
}
}

void outArray(int n, float arr[N])
{
for(int i = 0; i < n; i++)
{
printf("%f ", arr[i]);
}
}

最佳答案

&arr[N] 指的是包含数组中第 N 个(超出索引!!!)元素的内存位置(或左值)。

该代码调用未定义行为 (UB)。

因此,您实际上并没有将整个数组传递给您的函数,您只是试图传递该数组的第 N 个元素...阅读有关该表达式的更多信息 here .

改变这个:

fillArray(n, &arr[N]);
outArray(n, &arr[N]);

为此:

fillArray(n, arr);
outArray(n, arr);

Live Demo

问题是您的代码 n 已损坏,在调用 fillArray 函数后包含垃圾值。结果,当 outArray 函数被调用时,n 有一个垃圾值,这导致了一个不受控制的 for 循环,最终循环远超数组的限制,最终访问不属于您的内存,从而导致段错误。


不是您问题的原因,但我建议您在 fillArray 函数中执行 scanf("%f", &num);(在声明 num 之后 当然是 float),因为你想填充一个 float 组。

关于c - 程序在函数循环后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55187727/

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