C 读取10行整数的文件,将它们放入数组中,然后输出数组

C 读取10行整数的文件,将它们放入数组中,然后输出数组,c,C,在这个程序中,我想让用户输入2个参数,数字 整数,以及文件名 该文件有10行整数值 读取文件,并将其放入inArray[] 然后输出它作为结束 注:对于完整的程序,我想制作一个 将扫描一个由随机整数组成的文件,然后进行排序 按升序排列,并打印出前10% 已排序整数的 错误:现在,我想测试它是否可以读取文件并输入值 正确地输入inArray,但它不断出错 warning: initialization makes integer from pointer without a cast f

在这个程序中,我想让用户输入2个参数,数字 整数,以及文件名

  • 该文件有10行整数值
  • 读取文件,并将其放入inArray[]
  • 然后输出它作为结束

    注:对于完整的程序,我想制作一个 将扫描一个由随机整数组成的文件,然后进行排序 按升序排列,并打印出前10% 已排序整数的

    错误:现在,我想测试它是否可以读取文件并输入值 正确地输入inArray,但它不断出错

      warning: initialization makes integer from pointer without a cast
       findTotal.c:43:6: warning: passing argument 1 of ‘fopen’
                   makes pointer from integer without a cast
      /usr/include/stdio.h:271:14: note: expected ‘const 
       char * __restrict__’ but argument is of type ‘char’
    
  • 请帮我做这个,谢谢

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    
    int main(int argc, char *argv[]){
    
     int numOfInt;
     char fileName="";
    
     sscanf(argv[1],"%d",&numOfInt);
     sscanf(argv[2],"%c",&fileName);
    
     int i, rc;
    
     /* the origninal list , initialise as 0 index*/
     int inArray[numOfInt];
    
     /* the number of output int  */
     int outNumInt = numOfInt * 0.1;
    
     /*  the output array of int  */
     int outArray[outNumInt];
    
    
     FILE *inFile;
     inFile = fopen(fileName,"r");
    
     /*      check if the file is empty      */
     if(inFile==NULL){
        printf("can not open the file");
     }
    
     for (i = 0; (rc = getc(inFile)) != EOF && i < numOfInt; inArray[i++] = rc) 
     { 
    
    
     }//for
    
     fclose(inFile);
    
     for(i = 0; i < numOfInt;i++){
    
        printf("%x\n",inArray[i]);
     }
    
    
    
    }//main
    
    #包括
    #包括
    #包括
    int main(int argc,char*argv[]){
    国际货币基金组织;
    char fileName=“”;
    sscanf(argv[1]、“%d”、&numfint);
    sscanf(argv[2]、“%c”和文件名);
    int i,rc;
    /*原始列表,初始化为0索引*/
    int inArray[numOfInt];
    /*输出int的数目*/
    int-outNumInt=numOfInt*0.1;
    /*int的输出数组*/
    int outArray[outNumInt];
    文件*填充;
    infle=fopen(文件名为“r”);
    /*检查文件是否为空*/
    if(infle==NULL){
    printf(“无法打开文件”);
    }
    对于(i=0;(rc=getc(infle))!=EOF&&i
    我在您的代码中看到的问题之一是:

     char fileName="";
     sscanf(argv[2],"%c",&fileName)
    
    字符串文字是一个常量字符串,这意味着您不应该试图修改它,您应该为该字符串使用静态(或动态)字符数组并使用
    %s
    格式说明符,或者只将文件名指向argv[2]

    char *fileName;    
    fileName = argv[2];
    

    我在代码中看到的问题之一是:

     char fileName="";
     sscanf(argv[2],"%c",&fileName)
    
    字符串文字是一个常量字符串,这意味着您不应该试图修改它,您应该为该字符串使用静态(或动态)字符数组并使用
    %s
    格式说明符,或者只将文件名指向argv[2]

    char *fileName;    
    fileName = argv[2];
    

    文件名的管理确实有问题
    char
    用于字符;如果要处理文件名,必须使用字符串。在C语言中,我们可以使用以nul字符结尾的
    char
    数组。在这里,因为
    argv[2]
    直接保存名称,所以可以简单地使用指针

    char *fileName = argv[2];
    
    然后:

    fopen(fileName, "r");
    

    由于不修改
    argv
    指针,因此也可以直接将
    argv[2]
    作为参数发送。

    文件名的管理确实存在问题
    char
    用于字符;如果要处理文件名,必须使用字符串。在C语言中,我们可以使用以nul字符结尾的
    char
    数组。在这里,因为
    argv[2]
    直接保存名称,所以可以简单地使用指针

    char *fileName = argv[2];
    
    然后:

    fopen(fileName, "r");
    

    由于您不修改
    argv
    指针,因此也可以直接将
    argv[2]
    作为参数发送。

    我认为您在这里可以更好地使用scanf。您可以使用它读入两条本应作为参数传递给程序的信息,然后将其重新用于实际用途,即读取相关文件。以下是我的看法:

    #include <stdlib.h>
    #include <stdio.h>
    int cmp(const void *a, const void *b) { return *(int*)b - *(int*)a; }
    
    int main(int argc, char *argv[])
    {
        char * ifile = argv[1];
        int n = atoi(argv[2]), m = n/10, i;
        int nums[n];
        FILE * f = fopen(ifile, "r");
        for(i = 0; i < n; i++) fscanf(f, "%d", &nums[i]);
        qsort(nums, n, sizeof(int), cmp);
        for(i = 0; i < m; i++) printf("%d\n",nums[i]);
        return 0;
    }
    

    以这种方式获取参数的优点是,它使以后重复命令变得更容易(重复命令所需的所有信息都将出现在shell的命令历史记录中),并且它是向程序传递参数的标准方式。它还为其他用途释放了标准输入。

    我认为您可以在这里更好地使用scanf。您可以使用它读入两条本应作为参数传递给程序的信息,然后将其重新用于实际用途,即读取相关文件。以下是我的看法:

    #include <stdlib.h>
    #include <stdio.h>
    int cmp(const void *a, const void *b) { return *(int*)b - *(int*)a; }
    
    int main(int argc, char *argv[])
    {
        char * ifile = argv[1];
        int n = atoi(argv[2]), m = n/10, i;
        int nums[n];
        FILE * f = fopen(ifile, "r");
        for(i = 0; i < n; i++) fscanf(f, "%d", &nums[i]);
        qsort(nums, n, sizeof(int), cmp);
        for(i = 0; i < m; i++) printf("%d\n",nums[i]);
        return 0;
    }
    

    以这种方式获取参数的优点是,它使以后重复命令变得更容易(重复命令所需的所有信息都将出现在shell的命令历史记录中),并且它是向程序传递参数的标准方式。它还为其他用途释放了标准输入。

    您遇到了什么问题?您有什么错误?我可以建议您使用fscanf读取文件中的数字吗?您有什么问题?您遇到了什么错误?我建议您使用fscanf来读取文件中的数字吗?
    char fileName=“”
    没有任何意义。将常量字符串“”的地址存储到一个字符中(该字符太小,无法存储地址)。sscanf不会试图修改字符串文字,只会更改存储在文件名中的值。@Maxime它不会完全按照您说的做,但无论如何,这不是我的代码,这是OP的代码:)我只是引用问题我知道,我知道。如果你认为我说错了什么,请随时纠正我;)@马克西姆其实没关系,我没有仔细读你说的话,对不起:)
    char fileName=“”
    没有任何意义。将常量字符串“”的地址存储到一个字符中(该字符太小,无法存储地址)。sscanf不会试图修改字符串文字,只会更改存储在文件名中的值。@Maxime它不会完全按照您说的做,但无论如何,这不是我的代码,这是OP的代码:)我只是引用问题我知道,我知道。如果你认为我说错了什么,请随时纠正我;)@马克西姆其实没关系,我没有仔细读你说的话,对不起:)