c言語 select sort
最大値検索法のプログラムコードです。
どこがおかしいのでしょうか?
分かる方、教えてください。
よろしくおねがいします。
swapのプログラムコード
#include <stdio.h>
void swap(int *px,int *py);
int main (void)
{
FILE *fp;
if ((fp=fopen("file.txt","rt"))==NULL){
printf("File open error.\n");
return 0;
}
int i,a[100];
for(i=0;i<100;i++){
fscanf(fp,"%d,",&a[i]); //ファイルから読み込み処理。//
}
fclose(fp);
for(i=0;i<10;i++) printf("[%d]=%d\n",i,a[i]);
/*1.ソートすべきデータの中で最大のデータを見つけ、
2.そのデータを最後のデータと入れ替える。
最大データは配列のどこにあるのか⇒maxi
その値⇒max とする。*/
//データが10個の場合
int max,maxi,j;
max=a[0],maxi=0;
for(i = 0;i < 9; i++){
if(a[i + 1] > max){
max = a[i + 1];
maxi = i + 1;
}
swap(&a[maxi],&a[9-j]);
/* コマンド $cc sort.c swap.c */
for(j=0;j<9;j++){
printf("%d\n",j);
max=a[0], maxi=0;
for(i=0;i<9-j;i++){
//最大値をもつデータ探索;(カウンタ変数)
max++;
}
//最大データと探索範囲最後のデータとの入れ替え:
//void swap(int *px, int *py){
int n,*px,*py;
n = *px;
*px = *py;
*py = n;
// }
if((fp=fopen("file.txt","wt"))==NULL){
printf("File open error.\n");
return 0;
}
for(i=0;i<100;i++){
fprintf(fp,"%d",a[i]);
}
fclose(fp);
}
}
sort.cのプログラムコード
#include<stdio.h>
void swap (int *px,int *py);
int main(void)
{
int a[0],b,maxi,j,max;
max=a[0],maxi=0;
printf("input \"a\" as integer = "); scanf("%d",&a);
printf("input \"b\" as integer = "); scanf("%d",&b);
printf("Before swap...\n");
printf("a - b = %d, a / b = %d...%d\n",a-b,a-b,a-b);
// swap(&px,&py);
swap(&a[maxi],&a[9-j]);
printf("After swap...\n");
printf("a - b = %d, a / b = %d...%d\n",a-b,a-b,a-b);
return 0;
}
void swap (int *px,int *py)
{
int n;
n = *px;
*px = *py;
*py = n;
}
実行結果
/tmp/ccBGIpCi.o(.text+0x0): In function `main':
: multiple definition of `main'
/tmp/ccMCttJd.o(.text+0x0): first defined here
/usr/bin/ld: Warning: size of symbol `main' changed from 304 in /tmp/ccMCttJd.o to 641 in /tmp/ccBGIpCi.o
collect2: ld はステータス 1 で終了
お礼
試したところできました。 しかしなぜx+iなのか・・・ 先頭のアドレスから順に読み込むよ、という理解だとは思うのですが そのまま直接アドレスを読み込んでいるから&がいらないということなのでしょうか ちょっといろいろ調べてみます ありがとうございました