ここから本文です

プログラミングの課題です

sra********さん

2019/8/300:22:48

プログラミングの課題です

data1000から数字を読み込み、昇順、降順にソートしたものをresult_asc、result_descに出力するプログラミングを作りたいのですが、結果が0しか出力されません…どこが間違っているでしょうか?教えてください。

#include <stdio.h>

int a[1000];

void desc(void) {
int i, j;
for (i = 0; i < 999; i++) {
for (j = i + 1; j < 1000; j++) {
if (a[i] > a[j]) {
int tem = a[j];
a[j] = a[i];
a[i] = tem;
}
}
}
printf("desc done\n");
}
void asc(void) {
int i, j;
for (i = 0; i < 999; i++) {
for (j = i + 1; j < 1000; j++) {
if (a[i] < a[j]) {
int tem = a[j];
a[j] = a[i];
a[i] = tem;
}
}
}
printf("asc done\n");
}
void read(void) {
int i;
FILE*fp;
fp = fopen("data1000.txt", "r");
if (fp == NULL) {
printf("ファイルオープンエラー\n");
return;
}

for (i = 0; i < 1000; i++) {
int a[1000];
fscanf(fp, "%d", a);
}
fclose(fp);
printf("read done\n");
}
void descwrite(void) {
int i;
FILE*fp;
fp = fopen("result_desc.txt", "w");
if (fp == NULL) {
printf("ファイルオープンエラー\n");
return;
}
for (i = 0; i < 1000; i++) {
fprintf(fp, "%d\n", a[i]);
}
fclose(fp);
printf("write done\n");
}
void ascwrite(void) {
int i;
FILE*fp;
fp = fopen("result_asc.txt", "w");
if (fp == NULL) {
printf("ファイルオープンエラー\n");
return;
}
for (i = 0; i < 1000; i++) {
fprintf(fp, "%d\n", a[i]);
}
fclose(fp);
printf("write done\n");
}


int main(void) {
read();
asc();
ascwrite();
read();
desc();
descwrite();
return 0;
}

閲覧数:
15
回答数:
1

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

あみやさん

編集あり2019/8/300:41:01

ソートしているのは、グローバル変数のint a[1000]

ファイルからデータを読み込んでいるのはローカル変数のint a[1000]

for (i = 0; i < 1000; i++) {
int a[1000];
fscanf(fp, "%d", a);
}

ここで読まれたデータはfor文のループの度に捨てられます。

ついでにその問題を解決しても今の間だとずっと1つ目のデータに上書きし続けるだけになってます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/8/3 15:56:26

ありがとうございます!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる