#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
函数。
在行:
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
时需要传递其内存地址。
我认为问题出在p[i].a
参数上;请改用&p[i].a
。