昨日見た夢を教えて下さい

昇順にソートしたいのですけど、このソースだと実行しても、最後に入力した文字が、表示されます。分からないので宜しくお願いします。(例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);

}

A 回答 (3件)

下の方の答えの通りです。



ポインタでやるなら

scanf("%d", p_data+i);
とか
printf("data[%d]=%d\n", i,*(p_data+i));
とかやらないとダメ。
    • good
    • 0

 問題は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);
}

直したとこだけコメントを入れているので読んでくらはい。
    • good
    • 0

main()内のfor文の中で、p_dataの指す位置を動かしてないからでは?



わざわざポインタを使わなくても、data[i]とすればいいと思うけど。

scanf("%d", &(data[i]));

printf("data[%d]=%d\n", i, data[i]);

とか。

この回答への補足

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

補足日時:2006/02/14 22:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!