#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
函数。)
我认为问题出在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);
像这样更改您的代码:
#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
。