代码之家  ›  专栏  ›  技术社区  ›  ilteris

为什么程序在fscanf后崩溃

  •  1
  • ilteris  · 技术社区  · 2 年前

    我正试图用fscanf从文本文件中读取数据,但readData函数程序崩溃。它没有进入循环语句。在控制台中,只有打印数据被读取。当我试图读取主数据时,它工作正常,但我需要读取函数中的数据。

    #include <stdio.h>
    #include <stdio.h>
    
    void readData(int array[10][3]);
    
    int main(void)
    {
        int data[10][3],i;
        
        readData(data);
        
        for(i=0; i<10; i++)
        {
            printf("%d %d %d \n",data[i][0],data[i][1],data[i][2]);
        }
    }
    
    void readData(array[10][3])
    {
        int i;
        
        FILE *ptr = fopen("phonedata.txt","r");
        if(ptr == NULL)
        {
            printf("There is no file");
        }
        else
        {
            printf("Data is read");
        }
        
        while(fscanf(ptr, "%d %d %d",&array[i][0],&array[i][1],array[i][2]) != EOF);
        {
            i++;
        }
    }
    
    1 回复  |  直到 2 年前
        1
  •  3
  •   Vlad from Moscow    2 年前

    首先,您忘记在函数定义中指定参数的类型

    void readData(array[10][3])
    

    你需要写作

    void readData(int array[10][3])
    

    在函数中使用未初始化的变量 i .

    int i;
    

    你必须写作

    int i = 0;
    

    您还必须删除while循环后的分号

        while(fscanf(ptr, "%d %d %d",&array[i][0],&array[i][1],array[i][2]) != EOF);
    

    最好将条件写为

        while( i < 10 && fscanf(ptr, "%d %d %d",&array[i][0],&array[i][1],array[i][2]) == 3)
    

    需要将while循环放在else语句中

    else
    {
        printf("Data is read");
    
        while( i < 10 && fscanf(ptr, "%d %d %d",&array[i][0],&array[i][1],array[i][2]) == 3)
        {
            i++;
        }
    }
    

    您应该从函数返回填充的“行”数。

    在退出函数之前,必须关闭文件。

    fclose( ptr );