c言語 選択法
numbers.dat の中身は、91 63 71 14 60 1 24 13 80 15
numbers.dat というファイルからデータを読み込み選択法で、小さい順にソートするプログラムを作りたいのですが、以下のエラーが出ます。
#include <stdio.h>
int main(int argc, char *argv[]){
if(argc < 2){
fprintf(stderr,"ERROR:コマンドライン引数を指定してください.\n");
return 1;
}
FILE *fi;
if((fi=fopen("numbers.dat","r")) == NULL){
fprintf(stderr,"ERROR:ファイル(%s)は読み込むことができません.\n",argv[1]);
return 1;
}
puts("===読み込んだ値===");
int array[10]={0};
int i;
for(i=0; i<10; i++){
fscanf(fi,"%d",&array[i]);
printf("%d%s",array[i],i==9 ? "\n":"->");
}
selection_sort(array,10); //ここでソート
puts("===ソ\ート後==="); //ダメ文字
for(i=0; i<10; i++){
printf("%d%s",array[i],i==9 ? "\n":"->");
}
return 0;
}
void selection_sort(int array[],const int size){
int i;
for(i=0;i<size-1;i++){
int min=array[i];
int min_pos=i;
int n;
for(n=i+1;n<size;n++){
if(array[n]<min){
min=array[n];
min_pos=n;
}
}
int tmp=array[i];
array[i]=min;
array[min_pos]=tmp;
}
}
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>ERROR:コマンドライン引数を指定してください が表示されるので、
何故?
そのようにコードをコピペしてきたのでしょう?
エラーで表示されているようにコマンドライン引数を指定すればいいのでは?
./a.out copy
でも、
./a.out winner
でも、好きに指定してください。
そういうコードですから。
No.4
- 回答日時:
>実行しても、数字が表示されません
で……なにが表示されるんです?
『ERROR:コマンドライン引数を指定してください.』か
『ERROR:ファイル(ほゃらら)は読み込むことができません.』か、
『===読み込んだ値===』のどれかは表示されると思いますが。
# たぶん最初のだろうけど。
ちなみにコピペしているコードがどういう動作をするものか理解しないでコピペしてますよね?
No.3
- 回答日時:
例え貰い物でも、エラーが出たら、自分が作ったつもりで直すのが、プログラミング上達のコツです。
> :22:8: 警告: unknown escape sequence: '\343'
ファイル名:22:8 は 22行目8文字目の意味です。
puts("===ソ\ート後==="); //ダメ文字
の 最初の" の下に印が付いていると思います。
"===ソ\ート後==="
に関するエラー(正確には警告)です。
コメントにあるように「ダメ文字」対策ですが、そもそもそれが必要かどうか、です。
そのソースコードは、UTF-8で書かれているのでは?
それなら「ダメ文字対策」は基本不要です。
> (.text+0x130): undefined reference to `selection_sort'
これが出るのは、上記URLにある方ですよね?
たしかに、上記URLには、 selection_sort の実体が無いのでエラーになります。
この質問のをコンパイルしたら、違うエラーになるはずです。
C言語では「使う前に宣言する」が大原則です。
selection_sort(array,10); //ここでソート
の時点で、 selection_sort については何の情報もありません。
それがエラーの原因です。
余談)
>>for(i=0;i<size-1;i++){
>>int min=array[i];
>>int min_pos=i;
> これってどうなるんでしたっけね?
ここは「ブロックの先頭」なので、C89でもOKです。
FILE *fi;
とか
int tmp=array[i];
はNGなはずですけど、C99以降、あるいは、GCC独自拡張でOKなようです。
改善して、コンパイルはできたのですが、表示されません。
void selection_sort(int array[],const int size){
int i;
for(i=0;i<size-1;i++){
int min=array[i];
int min_pos=i;
int n;
for(n=i+1;n<size;n++){
if(array[n]<min){
min=array[n];
min_pos=n;
}
}
int tmp=array[i];
array[i]=min;
array[min_pos]=tmp;
}
}
#include <stdio.h>
int main(int argc, char *argv[]){
if(argc < 2){
fprintf(stderr,"ERROR:コマンドライン引数を指定してください.\n");
return 1;
}
FILE *fi;
if((fi=fopen("numbers.dat","r")) == NULL){
fprintf(stderr,"ERROR:ファイル(%s)は読み込むことができません.\n",argv[1]);
return 1;
fclose(fi);
}
puts("===読み込んだ値===");
int array[10]={0};
int i;
for(i=0; i<10; i++){
fscanf(fi,"%d",&array[i]);
printf("%d%s",array[i],i==9 ? "\n":"->");
}
selection_sort(array,10); //ここでソート
puts("===ソート後==="); //ダメ文字
for(i=0; i<10; i++){
printf("%d%s",array[i],i==9 ? "\n":"->");
}
return 0;
}
No.2
- 回答日時:
>puts("===ソ\ート後==="); //ダメ文字
ダメ文字問題が出るのはソースコードのファイルがShift-JISの時ですが…その辺りどうなんです?
# コンパイラがShift-JISにちゃんと対応していると、ダメ文字もちゃんと処理してくれる…んだったっけかな????
規格とかちゃんと当っていないけど……
>for(i=0;i<size-1;i++){
>int min=array[i];
>int min_pos=i;
これってどうなるんでしたっけね?
実行しても、数字が表示されません
なぜでしょうか?
void selection_sort(int array[],const int size){
int i;
for(i=0;i<size-1;i++){
int min=array[i];
int min_pos=i;
int n;
for(n=i+1;n<size;n++){
if(array[n]<min){
min=array[n];
min_pos=n;
}
}
int tmp=array[i];
array[i]=min;
array[min_pos]=tmp;
}
}
#include <stdio.h>
int main(int argc, char *argv[]){
if(argc < 2){
fprintf(stderr,"ERROR:コマンドライン引数を指定してください.\n");
return 1;
}
FILE *fi;
if((fi=fopen("numbers.dat","r")) == NULL){
fprintf(stderr,"ERROR:ファイル(%s)は読み込むことができません.\n",argv[1]);
return 1;
fclose(fi);
}
puts("===読み込んだ値===");
int array[10]={0};
int i;
for(i=0; i<10; i++){
fscanf(fi,"%d",&array[i]);
printf("%d%s",array[i],i==9 ? "\n":"->");
}
selection_sort(array,10); //ここでソート
puts("===ソート後==="); //ダメ文字
for(i=0; i<10; i++){
printf("%d%s",array[i],i==9 ? "\n":"->");
}
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
ハンドルされていない例外が発...
-
関数の実体定義にヘッダファイ...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
long型の定数の末尾にLを付ける...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
2重定義って??
-
変数の型を定義しなかった場合...
-
void func( void )について
-
【#define】 defineで定義した...
-
構造体を引数とする、クラス間...
-
TCP/IPでのgetsockname()の使い...
-
C++の(左辺値)参照を参照渡し
-
C言語のコンパイルエラー
-
VC6でlong longでエラー?
-
C言語の<ctype.h>のisspace()に...
-
APIENTRY と WINAPI
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
typedef enumの使い方を教えて...
-
C++のfor文について
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
関数の実体定義にヘッダファイ...
-
main.c:7:43: warning: implici...
-
変数の型を定義しなかった場合...
-
visualstudio C# テキストボッ...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
enumについて
-
構造体の宣言でエラーが出ます。
-
【#define】 defineで定義した...
-
C++ クラスをメンバにもつクラ...
-
0除算を判定したい
-
構造体の要素すべてに対する四...
-
値を返り値に返すのと参照渡し...
-
namespace定義の使い方
-
GCCで暗黙の型変換の警告を出し...
おすすめ情報