C 读取10行整数的文件,将它们放入数组中,然后输出数组
在这个程序中,我想让用户输入2个参数,数字 整数,以及文件名C 读取10行整数的文件,将它们放入数组中,然后输出数组,c,C,在这个程序中,我想让用户输入2个参数,数字 整数,以及文件名 该文件有10行整数值 读取文件,并将其放入inArray[] 然后输出它作为结束 注:对于完整的程序,我想制作一个 将扫描一个由随机整数组成的文件,然后进行排序 按升序排列,并打印出前10% 已排序整数的 错误:现在,我想测试它是否可以读取文件并输入值 正确地输入inArray,但它不断出错 warning: initialization makes integer from pointer without a cast f
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的代码:)我只是引用问题我知道,我知道。如果你认为我说错了什么,请随时纠正我;)@马克西姆其实没关系,我没有仔细读你说的话,对不起:)