Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C、 正在将文件元素读入数组,错误的访问代码_C_Arrays_File - Fatal编程技术网

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

C、 正在将文件元素读入数组,错误的访问代码,c,arrays,file,C,Arrays,File,我正在编写一个程序,从一个文件中读取30个数字,将它们存储在一个数组中,然后将该数组传递给一个函数,该函数将只打印该数组中的偶数。但是,我的while语句中出现了错误的访问代码 有什么建议吗?提前谢谢 #include <stdio.h> void even(int numbers[]); int main(int argc, const char * argv[]) { FILE *file = fopen("input.txt", "r"); if (fi

我正在编写一个程序,从一个文件中读取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]);
        }
    }
}
#包括
空偶数(整数[]);
int main(int argc,const char*argv[]{
FILE*FILE=fopen(“input.txt”,“r”);
if(file==NULL){
printf(“错误”);
}
整数[30];
int num=0;
int i=1;
而(fscanf(文件“%d”,&num)>0){
数字[i]=num;
i++;
}
fclose(文件);
偶数;
返回0;
}
空偶数(整数[]){
对于(int i=0;i<30;i++){
如果(数字[i]%2==0){
printf(“%d”,数字[i]);
}
}
}

您的代码主要有3.5个问题

  • 在第一个
    while
    循环中以
    i=1
    开始

    int i = 1;
    /*      ^ this should be 0 */
    while(fscanf(file, "%d,", &num) > 0)
    
    由于您从
    1
    开始,因此
    0
    第th个元素未初始化,但您仍然尝试在
    even()
    中读取它(先读后写),这会导致未定义的行为

  • 您从不检查
    i
    的值是否不超过数组中的元素数

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

  • 如果
    fscanf()
    成功,则返回匹配的元素数。这不会导致代码中出现问题,但绝对是错误的

  • 我得到了以下简单的修复

    int i = 0;
    while ((fscanf(file, "%d,", &num) == 1) && (i < 30))
    
    inti=0;
    而((fscanf(文件,“%d,”,&num)=1)和&(i<30))
    

    void偶数(整数[],大小\u t计数){
    for(int i=0;i

    不要编写无法重用的函数,这毫无意义。

    while(fscanf(file,“%d,,&num)>0)
    完全错误。请阅读。
    printf(“错误”)-->
    printf(“错误”);返回-1fscanf将返回零。
    
    void even(int numbers[], size_t count) {
        for (int i = 0 ; i < count ; i++) {
            if (numbers[i] %2 == 0) {
                printf("%d", numbers[i]);
            }
        }
    }