#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);
}
}
このコードの何が問題になっていますか?
実行時エラーが発生します。
どうしたの?
ほとんどのエラーはこの行から発生します。
scanf("%s%f",p[i].ch,p[i].a);
のアドレスを使用し、p[i].a
書き込む文字数を制限する必要がありますp[i].ch
。
scanf( "%19s%f", p[i].ch, &p[i].a );
しばらくCコードに触れていませんが、次のようなものではないでしょうか
scanf("%s%f",p[i].ch,&(p[i].a));
(変数のメモリアドレスを関数に与える必要がありscanf
ます。)
コードを次のように変更します。
#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);
}
}
変数a
はfloat
型であることに注意してください。を使用するときは、そのメモリ アドレスを渡す必要がありますscanf
。
p[i].a
問題はパラメーターにあると思います。代わりに使用&p[i].a
します。
行で:
scanf("%s%f", p[i].ch, p[i].a);
を(ポインタ)p[i].a
として使用していますが、 . 未定義の動作を呼び出しています。あなたはおそらく次のようにしたいと思っていました:float*
float
scanf("%s%f", p[i].ch, &p[i].a);