如何使用指针将值读入结构体?

5

我知道当我需要打印输出时,我使用 p->real 等等,但是当我使用 scanf 读取数字时应该写什么呢?

#include <stdio.h>

typedef struct {
    int real;
    int imaginary;
} complex;

void read(complex*);

void main() {
    complex c;
    read(&c);
}    

void read(complex* p){
    /*what to write in scanf*/
}

只是一个问题:你确定你的结构成员应该是 int,而不是 floatdouble 吗? - Benoit
1
所以我修复了你的代码格式,并更改了缩进,使其易于阅读。如果您在发布原始问题时这样做,对人们来说真的很有帮助... - Mark Elliot
@mark- 我该如何格式化代码?请帮忙。 - Kraken
这里发布的内容采用了一种叫做Markdown的格式,你可以在这里了解其语法:http://stackoverflow.com/editing-help。 - Mark Elliot
忘记 scanf 的存在,因为它通常会带来更多麻烦,试图完成两个任务(输入和解析),但都只做了一半。fgetssscanf 分开这两个任务,使得解析错误更容易处理。 - msw
3个回答

14

你可以写:

scanf("%d %d", &p->real, &p->imaginary);

但这在很大程度上取决于数字的格式。


4
出于清晰明了的原因,我可能会说 &(p->real) - Chris Cooper

6

scanf 要求你传递要存储结果的内存空间的 地址,而不像 printf 只需要值(它并不关心值所在的位置)。在 C 中获取变量的地址,需要使用 & 运算符:

int a;
scanf("%d", &a);

意思是:将整数读入我指定的地址,这里是a的地址。对于结构体成员也是如此,无论结构体本身存储在堆栈上还是堆上,通过指针访问等:

struct some_struct* pointer = ........;
scanf("%d", &pointer->member);

这将把整数读入结构体中成员的偏移量加上指针地址。


-2
请使用以下代码:
scanf("%d",&pointer->variable);

在问题中添加一个晚回答并没有什么问题,但是这个答案并没有为对话做出任何贡献,它只是之前两个答案的重复。请在回答问题时添加一些额外的信息,而不仅仅是抄袭已经被接受的答案。 - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接