gpt4 book ai didi

C,将文件元素读入数组,错误访问代码

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

我正在编写一个程序,它从一个文件中读取 30 个数字,将它们存储在一个数组中,然后将该数组传递给一个函数,该函数将只打印出该数组中的偶数。但是,我的 while 语句中出现错误访问代码错误。

有什么建议吗?提前致谢!

 #include <stdio.h>
void even(int numbers[]);

int main(int argc, const char * argv[]) {

FILE *file = fopen("input.txt", "r");

if (file == NULL) {
printf("error");
}

int numbers[30];
int num = 0;

int i = 1;
while(fscanf(file, "%d,", &num) > 0) {
numbers[i] = num;
i++;
}

fclose(file);

even(numbers);

return 0;
}

void even(int numbers[]){
for (int i = 0; i < 30; i++) {
if (numbers[i] %2 == 0) {
printf("%d", numbers[i]);
}
}
}

最佳答案

你的代码主要有3.5个问题

  1. 您在第一个 while 循环中从 i = 1 开始。

    int i = 1;
    /* ^ this should be 0 */
    while(fscanf(file, "%d,", &num) > 0)

    由于您从 1 开始,第 0 元素未初始化,但您仍然尝试读取它(先读后写) even() 并且会导致未定义的行为。

  2. 您永远不会检查 i 的值是否超出数组中元素的数量。

  3. 您尝试打印 30 个元素,即使您读取的可能少于这个数量,您必须计算成功读取的元素总数并将该数字传递给 even(),或者至少将数组初始化为 0

  4. 如果 fscanf() 成功,它返回匹配的元素数。这不会在您的代码中引起问题,但绝对是错误的。

我建议以下简单修复

int i = 0;
while ((fscanf(file, "%d,", &num) == 1) && (i < 30))

void even(int numbers[], size_t count) {
for (int i = 0 ; i < count ; i++) {
if (numbers[i] %2 == 0) {
printf("%d", numbers[i]);
}
}
}

不要写一个你不能重用的函数,那是没有意义的。

关于C,将文件元素读入数组,错误访问代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307965/

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