0

私は5冊の本の情報を格納するために構造の配列を使用しようとしています.私はインド亜大陸で非常に一般的な本、つまり「Let us C」を読んでいました. K&R.構造体の配列の例の 1 つを実装しようとしているときに、例に必要な変更を加えましたが、それでも特定のエラーが発生し、エラーを見つけることができません。

#include<stdio.h>

//void inkfloat(); commented as i am not using any float variable
int main()
{
    int i;
    struct book
    { 
        char bookname[30];
        char authorname[30];
        int price;
        int book_id;
    };

    struct book b[5];

    for(i=0;i<=4;i++)
    {
        printf("Enter bookname,authorname, price and book_id for book");
        scanf("%s %s %d %d",&b[i].bookname,&b[i].authorname,&b[i].price,&b[i].book_id);
    }

    for(i=0;i<=4;i++)
    {
        printf(" %s  %s  %d  %d \n",b[i].bookname,b[i].authorname,b[i].price,b[i].book_id); 
    }

    return 0;
}

/*void inkfloat()
  {
  float a=0,*b;
  b=&a;
  a=*b;
  }*/

私は次のように出力を得ています

Enter bookname,authorname, price and book_id for book shailendra
Enter bookname,authorname, price and book_id for book let us c
Enter bookname,authorname, price and book_id for bookEnter bookname,authorname, price and book_id for bookEnter bookname,authorname, price and book_id for bookyaswat kanetkar
 s, �, -1218811592, -1216872840 l, :, -1218241152, -1218240426 u, ~, -1216874216, 0 c, �, 134513259, 0 y, , -1218653802, -1217138700

それに加えて、コード内でフロート変数を使用しているときに本によれば使用されるインクフロート変数の使用を理解できません。 "

私はスタックオーバーフローで構造の配列とその他の関連する質問を見たことがありますが、コードで発生しているエラーを解決できません。

4

6 に答える 6

0

配列名は、配列の最初の要素へのポインタです。アドレス演算子は、scanf ステートメントの文字配列に適用しないでください。

   scanf("%s %s %d %d", b[i].bookname, b[i].authorname, &b[i].price, &b[i].book_id);
                       ^^^            ^^^
于 2013-06-24T11:06:03.177 に答える
0

他の人が言ったように、あなたには2つの間違いがあります:

  1. 行末まで読み取る fscaf の代わりに、最初の空白文字まで読み取る scanf を使用します。
  2. CString または配列を渡す場合、変数 b[i] のリテラルは既にポインターに減衰しているため、「&」文字を使用する必要はありません。

読み取りコードは次のようになります。

for(i=0;i<5;i++)
{
    printf("Enter bookname,authorname, price and book_id for book");
    fgets(b[i].bookname,30,stdin);
    fgets(b[i].authorname,30,stdin);
    scanf("%d %d",&b[i].price,&b[i].book_id);
}

ソース全体は cfiddle で確認できます: http://cfiddle.net/oZvbRm

于 2013-06-24T21:34:44.773 に答える