正如标题所述,我正在尝试从外部文本文件中读取数字并将它们分配给一个数组。如果我手动创建数组,我可以操作该数组并将结果写入另一个文件,但按原样,fscanf()
正在从文本文件中提取垃圾。这就是我目前所拥有的,我一直在这里阅读其他帖子,现在我已经将其更改了 12 次,但我认为我离解决方案还很远。
filename = argv[1];
FILE *fp;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("\n Unable to open input file.\n\n");
helpmssg();
exitmssg();
}
while (getc(fp) != EOF){
if (fscanf(fp,"%d", &c) == 1) {
arr[i] = c;
i++;
}
}
理想情况下,这应该扫描指定为命令行参数的文件中的数字,将其分配给数组的第一个位置,然后重复直到文件末尾。非常感谢任何帮助。
文本文件:
12
23
99
66
47
2
-111
8
每个请求添加整个主要功能:
void main(int argc,char** argv) {
char* filename;
char* outputfile;
char conf;
int arr[1000] = {0};
int n,a=0,d=0,h=0,i=0,c=0;
welcome();
if (argc > 4 || argc < 3) {
printf("\n Invalid number of arguments.\n\n");
helpmssg();
exitmssg();
}
else if (argc == 4) {
for (int i=3;i<argc;i++) {
if (argv[i][0] == '-') {
for(int z=1;z<strlen(argv[i]);z++) {
if (argv[i][z] == 'a') {
a=1;
}
else if (argv[i][z] == 'd') {
d=1;
}
else if (argv[i][z] == 'h') {
h=1;
}
else {
printf("\n Invalid options in 3rd argument.\n\n");
helpmssg();
exitmssg();
}
}
}
else {
printf("\n 3rd argument shoule begin with '-'\n\n");
helpmssg();
exitmssg();
}
} }
filename = argv[1];
FILE *fp;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("\n Unable to open input file.\n\n");
helpmssg();
exitmssg();
}
while ((c=getc(fp)) != EOF){
ungetc (c,fp);
if (fscanf(fp,"%d\n", &c) == 1) {
arr[i] = c;
i++;n++;
}
}
// int arr[] = {64, 34, 25, 12, 22, 11, 90};
sort(arr, n,d);
printf("Sorted array: \n");
printArray(arr, n);
outputfile = argv[2];
fp = fopen(outputfile, "r");
if (fp != NULL ) {
printf("\n Output file already exists, would you like to overwrite it?: Y/N \n\n");
scanf("%c", &conf);
if (conf == 'N' || conf == 'n') {
helpmssg();
exitmssg();
} else {printf(" Overwritting...\n\n");}
}
fclose(fp);
fp = fopen(outputfile, "w");
for (i=0; i < n; i++) {
fprintf(fp,"%d\n",arr[i]);
}
exitmssg();
}
最佳答案
你可以做
for(i=0; i<size ; ++i)
{
if( fscanf(fp, "%d", &arr[i])!=1 )
{
printf("\nSomething went wrong.");
break;
}
}
其中size
是数组中存储的数字数量。
使用fscanf()
将每一行中的整数一一读取。它返回成功分配的数量,在本例中,在循环的每次迭代中应为 1
。
在您的程序中,首先使用 getc()
读取一个字符,然后使用 fscanf()
只读取其余字符。
关于c - 从文件中读取数字并将其分配给 C 中的数组时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48739179/