我希望你能帮助我解决一些我不确定的事情,即使编译器没有抱怨它们:
在这里我需要编写一个获取输入和输出的程序,在输入文件中存储了我不知道它们的数量除以空格的整数,我需要读取这些数字,按数字总和比较对它们进行排序并打印出来输出文件中的排序数字。这就是我写的,然后是关于这段代码的几个简短问题:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
int myComp(const void *a, const void *b){
int x=(*(int*)a);
int y=(*(int*)b);
int sumForx=0;
int sumFory=0;
while (x){
sumForx=sumForx+(x%10);
x=(x-(x%10))/10;
}
while (y){
sumFory=sumFory+(y%10);
y=(y-(y%10))/10;
}
if (x>y) return 1;
else if (x<y) return -1;
else return 0;
}
int main(int argc, char** argv) {
FILE* inFile;
FILE* outFile;
int size=0;
int tmp;
if (argc!=3) {
printf("Please enter 3 arguments");
assert(0);
}
inFile=fopen(argv[1], "r");
if (inFile==NULL) {
printf("path to the input file has not found");
assert(0);
}
outFile=fopen(argv[2], "w");
if (outFile==NULL) {
printf("path to the output file has not found");
assert(0);
}
while (fscanf(inFile, "%d", &tmp)==1) {
size++;
}
int arr[size];
fseek(inFile, 0, SEEK_SET);
int i=0;
while (fscanf(inFile, "%d", &tmp)==1) {
arr[0]=tmp;
i++;
}
qsort(arr,size,sizeof(int),myComp);
int j;
for (j=0;j<size;j++){
fprintf(outFile,"%d",arr[j]);
fprintf(outFile,"%c",' ');
}
fclose(inFile);
fclose(outFile);
return 1;
}
我在主程序中不断定义新变量,在不同的地方——我记得我不应该这样做,因为所有变量都必须在函数的开头定义,除非有内部函数/括号的局部变量,这是这里不是这种情况——但编译器仍然可以接受——正确的做法是什么?
如果 (1) 的答案是“你必须在函数的开头定义所有变量”——在我的情况下,我必须
int* arr
在计算大小后定义动态并为其分配空间,否则我不能使用int arr[size]
,因为计算了大小在所有变量都已经定义之后,包括整数数组。
3.我想在打印到文件时在这些数字之间输入一个空格,fprintf(outFile,"%c",' ');
每次输入整数后是否正确?
4.欢迎任何其他更正!