コンパイラがそれらについて文句を言っていなくても、私がそれらについて確信が持てないいくつかのことであなたの助けをお願いします:
ここでは、入力と出力を取得するプログラムを作成する必要があります。入力ファイルには、金額をスペースで割った値がわからない整数が格納されていました。これらの数値を読み取り、桁数の合計で並べ替えて出力する必要があります。出力ファイル内のソートされた番号。これは私が書いたものであり、その後、このコードに関するいくつかの短い質問があります。
#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.その他の修正は大歓迎です!