C语言中调用返回结构体的函数后无法正确获取值且报未声明标识符错误的求助
C语言中调用返回结构体的函数后无法正确获取值且报未声明标识符错误的求助
嘿,我来帮你捋清楚这个问题!你的代码核心问题是没有接收scan_coords()函数返回的结构体值,咱们一步步拆解:
首先,你写的scan_coords()函数逻辑是对的——它创建了一个coords结构体实例,读取输入的坐标值后返回这个实例。但问题全出在main函数的调用方式上:
- 你最开始的代码里,
main里根本没声明pos变量,直接用pos.x肯定会报“未声明标识符”的错误!因为pos只是scan_coords()内部的局部变量,main函数完全访问不到它。 - 后来你尝试在
main开头声明struct coords pos;,但只是调用了scan_coords()却没把返回值赋值给pos,这时候pos的x和y都是未初始化的随机垃圾值,自然不是你输入的坐标。
修正后的完整代码
#include <stdio.h> // 别忘了加这个头文件,scanf和printf都依赖它 struct coords { int x; int y; }; struct coords scan_coords() { struct coords pos; scanf("%d", &pos.x); scanf("%d", &pos.y); return pos; } int main(void) { // 声明结构体变量的同时,直接接收函数返回的结构体值 struct coords pos = scan_coords(); // 现在就能正常访问输入的坐标了 printf("%d %d", pos.x, pos.y); return 0; // 加上main的返回值,符合C语言标准规范 }
另一种等价写法(分开声明和赋值)
如果你习惯先声明变量再赋值,也可以这么写:
int main(void) { struct coords pos; pos = scan_coords(); // 把函数返回的结构体副本赋值给pos printf("%d %d", pos.x, pos.y); return 0; }
简单说,scan_coords()会把它内部创建的pos的副本返回出来,你需要在main里用一个同类型的变量接住这个副本,才能使用里面的坐标值。
内容来源于stack exchange
相关产品推荐
相关产品推荐

