こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語 シンプルソート

C言語始めて1年の初心者です。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 10000

void swapData(char *x, char *y);
void simpleSort(char data[], int first, int last);
int main(int argc, char *argv[])
{
int data[MAXSIZE][300];
int i, j, count;
FILE *fp;

if(argc != 2)
{
fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
exit(0);
}
if ((fp = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "File %s is not found.\n", argv[1]);
exit(0);
}

for(i = 0; i < MAXSIZE; i++)
{
if (fscanf(fp,"%s", &data[i]) == EOF)
break;
}

simpleSort(data[], 0, i - 1);
for(j = 0; j < i; j++)
printf("%s\n", data[j]);
}

void swapData(char *x, char *y){
char tmp[300];

strcpy(tmp, x);
strcpy(x, y);
strcpy(y, tmp);
}


void simpleSort(char data[], int first, int last)
{
int i, j;
for(i = first; i < last; i++){
for(j = i+1; j <= last; j++){
if(strcmp(&data[i], &data[j]) > 0)
swapData(&data[i], &data[j]);
}
}
}


読み込んだ文字データをシンプルソートするプログラムなんですが、コンパイルできません。
simpleSortの部分がおかしいみたいなんですが、見直しても先入観からか間違いを見つけられません・・・・
どなたか間違いを指摘していただけたら助かります。

投稿日時 - 2011-07-08 13:25:44

QNo.6862412

困ってます

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

>simpleSort(data[], 0, i - 1);

引数として渡す時に、[]なんてつけません。
dataとだけ書けば、先頭のポインタが渡されます。

ただし、

> void simpleSort(char data[], int first, int last)

受け取る側の宣言が1次元配列になっています。
この関数内でdata[1]としても、元のデータのdata[0][1]を示すことになります。
char data[][300]じゃないですか?

投稿日時 - 2011-07-08 13:52:46

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

おっと、もう1つ。

> int data[MAXSIZE][300];

なんでintなの?

投稿日時 - 2011-07-08 13:54:40

ANo.1

「シンプルソート」ってなんだ....

さておき, 「コンパイルできない」とはどういうこと? 何かメッセージが出ているなら, そのメッセージを書いてください.

投稿日時 - 2011-07-08 13:44:52

補足

すいません・・・単純ソートのことです。

投稿日時 - 2011-07-08 13:48:22

あなたにオススメの質問