0
#include<stdio.h>
#include<string.h>

struct s {
    char ch[20];
    float a;
};

int main()
{
    struct s p[10];
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%s%f",p[i].ch,p[i].a);
    }
}

このコードの何が問題になっていますか?

実行時エラーが発生します。

どうしたの?

4

5 に答える 5

7

ほとんどのエラーはこの行から発生します。

scanf("%s%f",p[i].ch,p[i].a);

のアドレスを使用し、p[i].a書き込む文字数を制限する必要がありますp[i].ch

scanf( "%19s%f", p[i].ch, &p[i].a );
于 2013-07-10T13:59:22.333 に答える
3

しばらくCコードに触れていませんが、次のようなものではないでしょうか

scanf("%s%f",p[i].ch,&(p[i].a));

(変数のメモリアドレスを関数に与える必要がありscanfます。)

于 2013-07-10T14:00:31.493 に答える
2

コードを次のように変更します。

#include <stdio.h>
#include <string.h>
struct s {
    char ch[20];
    float a;
};

int main(){
    struct s p[10];
    int i;
    for(i=0;i<10;i++){
        scanf("%s%f",p[i].ch, &p[i].a);
    }
}

変数afloat型であることに注意してください。を使用するときは、そのメモリ アドレスを渡す必要がありますscanf

于 2013-07-10T14:00:14.263 に答える
2

p[i].a問題はパラメーターにあると思います。代わりに使用&p[i].aします。

于 2013-07-10T13:59:03.360 に答える
2

行で:

scanf("%s%f", p[i].ch, p[i].a);

を(ポインタ)p[i].aとして使用していますが、 . 未定義の動作を呼び出しています。あなたはおそらく次のようにしたいと思っていました:float*float

scanf("%s%f", p[i].ch, &p[i].a);
于 2013-07-10T13:59:11.600 に答える