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

我认为问题出在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 回答
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);
    }
}

请注意,变量a是一种float类型;使用时需要传递它的内存地址scanf

于 2013-07-10T14:00:14.263 回答