どこが間違っているのか教えて欲しいです。
/* 三つのint型整数を小さい順に表示する関数
int min3(int x, int y, int z)
を作成せよ.但し,動作を確認するための適当なmain関数も併せて作成せよ.*/
#include <stdio.h>
void swap(int *k,int *l)
{int temp;
temp=*k;
*k=*l;
*l=temp;
return;
}
void min3(int x,int y,int z)
{
int data[]={x,y,z};
if(data[0]>data[1]){
swap(&data[0],&data[1]);
}
if(data[1]>data[2]){
swap(&data[1],&data[2]);
}
if(data[2]>data[3]){
swap(&data[2],&data[3]);
}
printf("%d,%d,%d",data[0],data[1],data[2]);
return;
}
int main(void)
{int i;
int data[];
printf("数字を入力してください");
for(i=0;i<=2;i++){
printf("i=");
scanf("%d",data);}
printf("小さい順に並べると%dとなります。");min3(&data[0],&data[1],&data[2]);
return 0;
}
数字を小さい順に並べるプログラム
Re: 数字を小さい順に並べるプログラム
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
ただし、コンパイラ様もすぐには気付けない間違いもあります。
致命的に間違っている場所にコメントを書きました。
プログラムとしては致命的ではないですが、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
オフトピック
他の回答者さんへ:
掲示板の配慮を欠いた設計により、[i]が終了タグが無いにも関わらず斜体のタグと解釈され、
隠されているようです。
コードは引用画面から読むのが良いです。
掲示板の配慮を欠いた設計により、[i]が終了タグが無いにも関わらず斜体のタグと解釈され、
隠されているようです。
コードは引用画面から読むのが良いです。
まずはコンパイラ様に教えてもらいましょう。youaaaaaa さんが書きました: ↑2年前どこが間違っているのか教えて欲しいです。
prog.c: In function 'main':
prog.c:39:5: error: array size missing in 'data'
39 | int data[];
| ^~~~
prog.c:43:13: warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]
43 | scanf("%d",data[i]);}
| ~^ ~~~~~~~
| | |
| int * int
prog.c:45:32: warning: format '%d' expects a matching 'int' argument [-Wformat=]
45 | printf("小さい順に並べると%dとなります。");min3(&data[0],&data[1],&data[2]);
| ~^
| |
| int
prog.c:45:53: warning: passing argument 1 of 'min3' makes integer from pointer without a cast [-Wint-conversion]
45 | printf("小さい順に並べると%dとなります。");min3(&data[0],&data[1],&data[2]);
| ^~~~~~~~
| |
| int *
prog.c:15:15: note: expected 'int' but argument is of type 'int *'
15 | void min3(int x,int y,int z)
| ~~~~^
prog.c:45:62: warning: passing argument 2 of 'min3' makes integer from pointer without a cast [-Wint-conversion]
45 | printf("小さい順に並べると%dとなります。");min3(&data[0],&data[1],&data[2]);
| ^~~~~~~~
| |
| int *
prog.c:15:21: note: expected 'int' but argument is of type 'int *'
15 | void min3(int x,int y,int z)
| ~~~~^
prog.c:45:71: warning: passing argument 3 of 'min3' makes integer from pointer without a cast [-Wint-conversion]
45 | printf("小さい順に並べると%dとなります。");min3(&data[0],&data[1],&data[2]);
| ^~~~~~~~
| |
| int *
prog.c:15:27: note: expected 'int' but argument is of type 'int *'
15 | void min3(int x,int y,int z)
| ~~~~^
致命的に間違っている場所にコメントを書きました。
#include <stdio.h>
void swap(int *k,int *l)
{int temp;
temp=*k;
*k=*l;
*l=temp;
return;
}
void min3(int x,int y,int z)
{
int data[]={x,y,z};
if(data[0]>data[1]){
swap(&data[0],&data[1]);
}
if(data[1]>data[2]){
swap(&data[1],&data[2]);
}
if(data[2]>data[3]){ /* 範囲外の data[3] にアクセスしている (コンパイラ様の指摘には無い) */
swap(&data[2],&data[3]); /* 範囲外の data[3] にアクセスしている (コンパイラ様の指摘には無い) */
}
printf("%d,%d,%d",data[0],data[1],data[2]);
return;
}
int main(void)
{int i;
int data[]; /* 要素数を指定せず(明示的な指定も、初期化による暗黙の指定も無い)配列を定義しようとしている */
printf("数字を入力してください");
for(i=0;i<=2;i++){
printf("i=");
/* int型のデータへのポインタを渡すべき所に、ポインタではなく整数を渡している */
/* (data[i] の前に & が抜けている) */
scanf("%d",data[i]);}
/* int型のデータを出力する書式 %d が使われているのに、対応するデータを渡していない */
printf("小さい順に並べると%dとなります。");
/* int型のデータを渡すべき所に、整数ではなくポインタを渡している */
/* (余計な & が入っている ) */
min3(&data[0],&data[1],&data[2]);
return 0;
}
と書かれているのに、返り値の型が違う しか作成していないのも間違いといえますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 数字を小さい順に並べるプログラム
ごめんなさい、リンク先間違いです。
(編集の制限時間ギリギリでリンクが抜けていることに気がついたのででよく確認せずにリンクを貼り、
そのまま時間切れになってしまいました)
正しくは https://wandbox.org/permlink/rcRUewltC5f1jSwk
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)