
sort.txtから読み込んだ値を
昇順でソートして出力するにはどうしたらよいでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <search.h>
/* 比較関数 */
int strcmp_asc(const void *, const void *);
int main(void)
{
FILE*fin, *fout;
inti;
intlength;
chars[256], s2[256];
if( (fin=fopen("sort.txt","r"))==NULL) {
printf("入力ファイルがオープンできません\n");
exit(EXIT_FAILURE);
}
if( (fout=fopen("file2.txt","w"))==NULL) {
printf("出力ファイルがオープンできません\n");
exit(EXIT_FAILURE);
}
while(fgets(s, 256, fin) != NULL) {
/* 要素数を求める */
length = sizeof(s) / 256;
/* 昇順でソート */
qsort(s, length, 256, strcmp_asc);
/*memset(s2, NULL, sizeof(s2));
for (i = 0; i < length; i++)
{
}
*/
fprintf(fout,"%s\n",s2);
}
fclose(fin);
fclose(fout);
return 0;
}
int strcmp_asc(const void *sa, const void *sb)
{
return strcmp((char *)sa, (char *)sb);
}
sort.txt
50
45
35
25
15
10
5
1
32
46
8
7
9
19
18
14
16
13
12
17
11
20
40
30
31
3
2
37
38
36
33
39
34
49
47
48
4
6
44
42
43
41
21
22
26
24
28
29
27
23
No.3ベストアンサー
- 回答日時:
★アドバイス
>sort.txtから読み込んだ値を
>昇順でソートして出力するにはどうしたらよいでしょうか?
読み込み部分が正しくないありませんね。
ファイルに数値のみしかないならfscanf()関数を使って
すべてを配列に代入してからソートすれば良いでしょう。
・下にサンプルを載せておきます。
サンプル:
int data[ 10000 ]; ←ちょっと多めに宣言
int max;
// fscanfで読み込み
for ( max = 0 ; max < 10000 ; max++ ){
if ( fscanf(fin,"%d\n",&data[max]) != 1 ){
break;
}
}
// ここでソート
qsort( data, max, sizeof(int), strcmp_value );
注意事項:
・比較関数の strcmp_value は作り直して下さい。
作り方分かりますよね。
ポイントは整数値の比較ですよ。
この回答への補足
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <search.h>
/* 比較関数 */
int numcmp_asc(const void *, const void *);
int main(void)
{
FILE*fin, *fout;
inti;
chars[256];
intdata[10000];
intmax;
if( (fin=fopen("sort.txt","r"))==NULL) {
printf("入力ファイルがオープンできません\n");
exit(EXIT_FAILURE);
}
if( (fout=fopen("file2.txt","w"))==NULL) {
printf("出力ファイルがオープンできません\n");
exit(EXIT_FAILURE);
}
for(max = 0; max < 10000; max++){
if(fscanf(fin, "%d\n", &data[max]) != 1){
break;
}
}
qsort(data, max, sizeof(int), numcmp_asc);
fprintf(fout, "%d\n", data);
fclose(fin);
fclose(fout);
return 0;
}
/**
* 数値を昇順で比較します。
* @param na 比較する数値
* @param nb 比較する数値
* @return na が nb と等しい場合は 0 、
* na が nb より小さい場合は -1 以下、
* na が nb より大きい場合は 1 以上
*/
int numcmp_asc(const void *na, const void *nb)
{
return *(int *)na - *(int *)nb;
}
これではうまくいきませんでした。
初心者なので、どこがダメなのかよくわかりません。
アドバイスをお願いします。
No.5
- 回答日時:
★アドバイス
>これではうまくいきませんでした。
>初心者なので、どこがダメなのかよくわかりません。
>アドバイスをお願いします。
↑
配列をちゃんと理解していませんね。
間違っている箇所は
>fprintf(fout, "%d\n", data);
の表示部分だけです。
ここさえ直せば動くでしょう。
テキスト(教本)で『配列とは』を読み直して下さい。
特に配列の内容をprintf()関数などで表示する方法を探す。
・簡単すぎるので勘を働かせて下さい。
試行錯誤すれば初心者でも身につきます。
No.1
- 回答日時:
根本的にqsortを使うには、そのテキストファイルの全てがメモリー上に配置されなければなりません。
入れ替えするのですから。従って配列sを一次元で確保してますが二次元にする(或いは全て一括でfreadしてポインター配列を別途確保するか)事が必要です。
まず全部をメモリーに読んで表示出来てからqsortに進みましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# DataTableの行をソートしてD...
-
VBA基本構文の作り方 2列の...
-
構造体のリストをソートしたい。
-
System.IO.Directory.GetFiles...
-
ArrayList とSortedList
-
ソートのアルゴリズム
-
C# DataGridView のヘッダーセ...
-
DataGridViewの複数列を連動し...
-
シェルソートの順位性
-
構造体配列の並べ替え
-
GridViewで列のソートを無効に...
-
Double型ソート方法
-
DataGridViewのソートを止めたい
-
明日までの宿題で困っています...
-
VBScriptで重複レコードを削除...
-
C# ArrayListを二次元配列のよ...
-
文字列をソートする方法
-
sortの優先キーについて(スプレ...
-
昇順と降順
-
単純挿入ソート法の要素の比較...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
C# DataTableの行をソートしてD...
-
VBA基本構文の作り方 2列の...
-
ファイル名「1.jpg ~10.jpg~...
-
あるディレクトリ内のファイル...
-
GridViewで列のソートを無効に...
-
C言語・要素除去
-
excel VBA の条件をつけての列...
-
Excelですべての組合せ(重複組...
-
VBScriptで配列のソートをする...
-
配列の問題
-
ブック.csvを開かずに他のブッ...
-
2次元配列を複数項目でソートし...
-
構造体配列のソート
-
listboxの並び替え
-
構造体のリストをソートしたい。
-
リスト構造のソートで悩んでま...
-
文字列をソートする方法
おすすめ情報