• ベストアンサー

C言語

昇順にソートしたいのですけど、このソースだと実行しても、最後に入力した文字が、表示されます。分からないので宜しくお願いします。(例21,34 55を入力すると、55,55,55と表示されます) #include <stdio.h> void sort1(int *dt, int n) { int i,temp,exchg=0; while (exchg<n) { for (i=1; i<n; i++) { if (dt[i-1] > dt[i]) { temp=dt[i-1]; dt[i-1]=dt[i]; dt[i]=temp; } } exchg++; } }int main(void) { int data[10]; int no=3; int i,*p_data; p_data =data; printf("%d個の整数を入力してください。\n",no); for (i=0; i<no; i++) { printf("data[%d]:",i); scanf("%d", p_data); } sort1(data,no); puts("これからの値を昇順に並び替えました。"); for (i=0; i <no; i++) printf("data[%d]=%d\n", i,*p_data); return(0); }

質問者が選んだベストアンサー

  • ベストアンサー
  • takoashi
  • ベストアンサー率39% (21/53)
回答No.2

下の方の答えの通りです。 ポインタでやるなら scanf("%d", p_data+i); とか printf("data[%d]=%d\n", i,*(p_data+i)); とかやらないとダメ。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

 問題はmainにあるので、mainだけ書き直してみた。 int main(void) { int data[10]; int no = 3; int i, *p_data; p_data = data; printf("%d個の整数を入力してください。\n", no); for(i = 0; i < no; i++) { printf("data[%d]:", i); scanf("%d", p_data++); /* scanfにアドレスを渡した後ポインタをインクリメントする */ } sort1(data, no); p_data = data; /* ポインタの位置を戻す */ puts("これからの値を昇順に並び替えました。"); for(i = 0; i < no; i++) printf("data[%d] = %d\n", i, *p_data++); /* printfにポインタが指し示すint値を渡した後ポインタをインクリメント */ return(0); } 直したとこだけコメントを入れているので読んでくらはい。

すると、全ての回答が全文表示されます。
  • butarou
  • ベストアンサー率24% (7/29)
回答No.1

main()内のfor文の中で、p_dataの指す位置を動かしてないからでは? わざわざポインタを使わなくても、data[i]とすればいいと思うけど。 scanf("%d", &(data[i])); printf("data[%d]=%d\n", i, data[i]); とか。

jjjj27
質問者

補足

配列の操作にポインタを用いたいんですけど。

すると、全ての回答が全文表示されます。