教えてください。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tatu

教えてください。

#1

投稿記事 by tatu » 15年前

void ascending_order(list[LIST_ITEM].sp, list[LIST_ITEM].p){
↑この文がダメって(Argument list syntax error)言われるんですが、なぜですか??

box

Re:教えてください。

#2

投稿記事 by box » 15年前

他の行に真のエラー原因があって、その行だけを見ても
何もわからないことがあります。

できれば、ソースコード全体を見せてくださるのが望ましいと思います。
そうすれば、こちらでも実際にコンパイルしてみることができますから。

tatu

Re:教えてください。

#3

投稿記事 by tatu » 15年前

指摘お願いします。

Mist

Re:教えてください。

#4

投稿記事 by Mist » 15年前

構造体を引数とする関数の作り方が間違っています。
下記の頁を読んでください。

http://www9.plala.or.jp/sgwr-t/c/sec15-4.html

tatu

Re:教えてください。

#5

投稿記事 by tatu » 15年前

構造体は、mainの中ではダメなんですか??

box

Re:教えてください。

#6

投稿記事 by box » 15年前

> 構造体は、mainの中ではダメなんですか??

昇順や降順にソートする関数の引数に使っている
構造体の定義を、なぜ当該関数の中で行なっているのですか?
というご指摘を受けています。

tatu

Re:教えてください。

#7

投稿記事 by tatu » 15年前

よくわかんないです・・・

box

Re:教えてください。

#8

投稿記事 by box » 15年前

何がわからないのか、主語をきちんと書いてください。

tatu

Re:教えてください。

#9

投稿記事 by tatu » 15年前

>boxさん

昇順、降順の関数で構造体の引数を使うのは変ってことですか??

box

Re:教えてください。

#10

投稿記事 by box » 15年前

そうではありません。
問題は、引数として使うよりも「前に」構造体を定義していない、という点にあります。

また、今のコードでは、引数として渡している変数の型が不明ですね。
構造体ではない型、例えばint型の変数を引数として渡すとき、どういう風に書きますか?
画像

tatu

Re:教えてください。

#11

投稿記事 by tatu » 15年前

こう言う感じですか??

void func(int x, int y){
printf("%d %d", x, y);
}

void main(void){
int a, b;
a = 5;
b = 3;

func(a, b);
}

box

Re:教えてください。

#12

投稿記事 by box » 15年前

> void func(int x, int y){

こういう風に、引数の並びを書くときは、
「型名 変数名(, 型名, 変数名 ...)」と書きますね。

ひるがえって、最初のコードを見てください。
引数の型がどこにも書いてありません。

tatu

Re:教えてください。

#13

投稿記事 by tatu » 15年前

やってみましたけど、やっぱダメでした。

Poco

Re:教えてください。

#14

投稿記事 by Poco » 15年前

> void ascending_order(unsigned char list[LIST_ITEM].sp, unsigned long list[LIST_ITEM].p){

仮引数名(list[LIST_ITEM].sp、list[LIST_ITEM].p))が不正です。
spとかpとか簡単な名前に置き換えてください。

box

Re:教えてください。

#15

投稿記事 by box » 15年前

MistさんのNo.56380を再読してください。
構造体を宣言する場所が、本当にそこでいいでしょうか。
また、構造体のメンバー構成が同じでも、
shoppingという構造体とcoursesという構造体とは別物として扱います。
今回のプログラムではそういう扱いでいいのでしょうか。

tatu

Re:教えてください。

#16

投稿記事 by tatu » 15年前

こんにちは。
関数を取り払って、まず構造体から直してみました。
でも、まだ直ってないのですがどこが悪いのか指摘してください。
因みに、「未定義のシンボル sp(関数 main)」って返ってきます。
お願いします。

もぐりん

Re:教えてください。

#17

投稿記事 by もぐりん » 15年前

ちなみに、コンパイラは何を使用していますか?
質問するなら、最低限開発環境も提示しないと検証できませんよ。

白い時空

Re:教えてください。

#18

投稿記事 by 白い時空 » 15年前

気付いたところとしては
scanf("%s", &liste[LIST_ITEM].sp);
ここの&は必要ないと思います。

liste.p < liste.sp
この比較は明らかにおかしいです。

fatens

Re:教えてください。

#19

投稿記事 by fatens » 15年前

>「未定義のシンボル sp(関数 main)」って返ってきます。

struct shopping{
unsigned long p;
unsinged char sp[SP_ITEM];
};
unsinged → unsigned です。
予約語の色を変えてくれるエディタなどを使うと、こういう綴りミスはすぐに見つけられると思います。


いろいろ問題はありますが、とりあえず1つ挙げておくと、
構造体変数は比較はできませんが代入はできるので、ソートの内部はもっと簡単にできます。

tatu

Re:教えてください。

#20

投稿記事 by tatu » 15年前

みなさん、ありがとうございます。
>もぐりん
>コンパイラは何を使用していますか?
Borlandです。「独習C(参考書)」についてたものです。

>白い時空
>scanf("%s", &liste[LIST_ITEM].sp);
>ここの&は必要ないと思います。
なぜですか??
>liste.p < liste.sp
>この比較は明らかにおかしいです。
すいません。これは「liste.p < liste[j].p」です。

>fatens
>unsinged → unsigned です。
すいません。簡単なミスですね。

動くようにはなったのですが、文字化けしてしまってるんです。
自分の環境ではないところでは、上手くいってたのですが…。

ドラ

Re:教えてください。

#21

投稿記事 by ドラ » 15年前

>for(i = 0; i < LIST_ITEM; i++){
> printf("買い物:");
> scanf("%s", &liste[LIST_ITEM].sp);
> printf("値段:");
> scanf("%lu", &liste[LIST_ITEM].p);
>}
入力した値をどこに格納しているか確認してください。

box

Re:教えてください。

#22

投稿記事 by box » 15年前

>>scanf("%s", &liste[LIST_ITEM].sp);
>>ここの&は必要ないと思います。
>なぜですか??

scanf関数の第2引数以降は、ポインタである必要がありますね。
また、C言語の大前提として、「配列名は、その配列の先頭要素へのポインタである」
というものがあります。よって、

scanf("%s", liste[LIST_ITEM].sp);

という結論を得ます。

閉鎖

“C言語何でも質問掲示板” へ戻る