ページ 1 / 1
教えてください。
Posted: 2010年7月09日(金) 13:20
by tatu
void ascending_order(list[LIST_ITEM].sp, list[LIST_ITEM].p){
↑この文がダメって(Argument list syntax error)言われるんですが、なぜですか??
Re:教えてください。
Posted: 2010年7月09日(金) 14:34
by box
他の行に真のエラー原因があって、その行だけを見ても
何もわからないことがあります。
できれば、ソースコード全体を見せてくださるのが望ましいと思います。
そうすれば、こちらでも実際にコンパイルしてみることができますから。
Re:教えてください。
Posted: 2010年7月09日(金) 14:53
by tatu
指摘お願いします。
Re:教えてください。
Posted: 2010年7月09日(金) 15:04
by Mist
Re:教えてください。
Posted: 2010年7月09日(金) 15:26
by tatu
構造体は、mainの中ではダメなんですか??
Re:教えてください。
Posted: 2010年7月09日(金) 15:35
by box
> 構造体は、mainの中ではダメなんですか??
昇順や降順にソートする関数の引数に使っている
構造体の定義を、なぜ当該関数の中で行なっているのですか?
というご指摘を受けています。
Re:教えてください。
Posted: 2010年7月09日(金) 15:54
by tatu
よくわかんないです・・・
Re:教えてください。
Posted: 2010年7月09日(金) 16:08
by box
何がわからないのか、主語をきちんと書いてください。
Re:教えてください。
Posted: 2010年7月09日(金) 19:53
by tatu
>boxさん
昇順、降順の関数で構造体の引数を使うのは変ってことですか??
Re:教えてください。
Posted: 2010年7月09日(金) 20:13
by box
そうではありません。
問題は、引数として使うよりも「前に」構造体を定義していない、という点にあります。
また、今のコードでは、引数として渡している変数の型が不明ですね。
構造体ではない型、例えばint型の変数を引数として渡すとき、どういう風に書きますか?

Re:教えてください。
Posted: 2010年7月09日(金) 21:42
by tatu
こう言う感じですか??
void func(int x, int y){
printf("%d %d", x, y);
}
void main(void){
int a, b;
a = 5;
b = 3;
func(a, b);
}
Re:教えてください。
Posted: 2010年7月09日(金) 22:01
by box
> void func(int x, int y){
こういう風に、引数の並びを書くときは、
「型名 変数名(, 型名, 変数名 ...)」と書きますね。
ひるがえって、最初のコードを見てください。
引数の型がどこにも書いてありません。
Re:教えてください。
Posted: 2010年7月10日(土) 00:11
by tatu
やってみましたけど、やっぱダメでした。
Re:教えてください。
Posted: 2010年7月10日(土) 01:13
by Poco
> 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とか簡単な名前に置き換えてください。
Re:教えてください。
Posted: 2010年7月10日(土) 07:52
by box
MistさんのNo.56380を再読してください。
構造体を宣言する場所が、本当にそこでいいでしょうか。
また、構造体のメンバー構成が同じでも、
shoppingという構造体とcoursesという構造体とは別物として扱います。
今回のプログラムではそういう扱いでいいのでしょうか。
Re:教えてください。
Posted: 2010年7月11日(日) 12:39
by tatu
こんにちは。
関数を取り払って、まず構造体から直してみました。
でも、まだ直ってないのですがどこが悪いのか指摘してください。
因みに、「未定義のシンボル sp(関数 main)」って返ってきます。
お願いします。
Re:教えてください。
Posted: 2010年7月11日(日) 13:01
by もぐりん
ちなみに、コンパイラは何を使用していますか?
質問するなら、最低限開発環境も提示しないと検証できませんよ。
Re:教えてください。
Posted: 2010年7月11日(日) 13:22
by 白い時空
気付いたところとしては
scanf("%s", &liste[LIST_ITEM].sp);
ここの&は必要ないと思います。
liste.p < liste.sp
この比較は明らかにおかしいです。
Re:教えてください。
Posted: 2010年7月11日(日) 14:04
by fatens
>「未定義のシンボル sp(関数 main)」って返ってきます。
struct shopping{
unsigned long p;
unsinged char sp[SP_ITEM];
};
unsinged → unsigned です。
予約語の色を変えてくれるエディタなどを使うと、こういう綴りミスはすぐに見つけられると思います。
いろいろ問題はありますが、とりあえず1つ挙げておくと、
構造体変数は比較はできませんが代入はできるので、ソートの内部はもっと簡単にできます。
Re:教えてください。
Posted: 2010年7月11日(日) 16:54
by tatu
みなさん、ありがとうございます。
>もぐりん
>コンパイラは何を使用していますか?
Borlandです。「独習C(参考書)」についてたものです。
>白い時空
>scanf("%s", &liste[LIST_ITEM].sp);
>ここの&は必要ないと思います。
なぜですか??
>liste.p < liste.sp
>この比較は明らかにおかしいです。
すいません。これは「liste.p < liste[j].p」です。
>fatens
>unsinged → unsigned です。
すいません。簡単なミスですね。
動くようにはなったのですが、文字化けしてしまってるんです。
自分の環境ではないところでは、上手くいってたのですが…。
Re:教えてください。
Posted: 2010年7月11日(日) 18:30
by ドラ
>for(i = 0; i < LIST_ITEM; i++){
> printf("買い物:");
> scanf("%s", &liste[LIST_ITEM].sp);
> printf("値段:");
> scanf("%lu", &liste[LIST_ITEM].p);
>}
入力した値をどこに格納しているか確認してください。
Re:教えてください。
Posted: 2010年7月11日(日) 19:58
by box
>>scanf("%s", &liste[LIST_ITEM].sp);
>>ここの&は必要ないと思います。
>なぜですか??
scanf関数の第2引数以降は、ポインタである必要がありますね。
また、C言語の大前提として、「配列名は、その配列の先頭要素へのポインタである」
というものがあります。よって、
scanf("%s", liste[LIST_ITEM].sp);
という結論を得ます。