You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scanf无法读取结构体内部数据问题求助

解决scanf无法读取输入的问题

嘿,我帮你排查下这个scanf读取失败的问题!你说不管输入什么程序输出都一致,大概率是scanf根本没正确把输入写到变量里,导致变量一直是初始的垃圾值或者默认值,所以输出没变化。结合你给出的代码片段,我猜大概率是这几个常见坑:

最可能的问题:格式符不匹配

你定义的是double类型的坐标,但如果scanf里用了%f而不是%lf,那肯定会读取失败!因为%f是给float用的,double对应的scanf格式符必须是%lf,这是新手最容易踩的坑。

第二个常见坑:没传变量的地址

scanf要求传入变量的内存地址才能修改它的值,如果你写的是scanf("%lf", new_rect.pt1.x)而不是&new_rect.pt1.x,那相当于传了一个随机的数值进去,scanf根本不知道要把输入写到哪里,变量自然不会变。

第三个可能:结构体成员引用错误

你之前定义了全局的pt1,pt2,但在main里如果用的是struct rect new_rect,那你要修改的是new_rect.pt1.x而不是全局的pt1.x,如果搞混了,那你输入的内容都写到全局变量里了,但输出的是结构体里的成员,结果自然还是初始值。

给你一个修正后的完整示例代码,你可以参考:

#include <stdio.h>

// 先定义point结构体
struct point{ 
    double x; 
    double y; 
};
// rect结构体包含四个point成员
struct rect{ 
    struct point pt1; 
    struct point pt2; 
    struct point pt3; 
    struct point pt4; 
};

int main() {
    struct rect new_rect; // 定义一个rect类型的变量
    
    printf("请输入四个点的坐标(格式:x1 y1 x2 y2 x3 y3 x4 y4):\n");
    // 注意:每个参数都要加&,格式符用%lf,正确引用结构体成员
    int read_count = scanf("%lf %lf %lf %lf %lf %lf %lf %lf", 
                          &new_rect.pt1.x, &new_rect.pt1.y,
                          &new_rect.pt2.x, &new_rect.pt2.y,
                          &new_rect.pt3.x, &new_rect.pt3.y,
                          &new_rect.pt4.x, &new_rect.pt4.y);
    
    // 可以加个检查,看看有没有读取到8个值
    if (read_count != 8) {
        printf("输入错误!只读取到%d个有效数值\n", read_count);
        return 1;
    }
    
    // 输出验证
    printf("\n你输入的四个点坐标:\n");
    printf("pt1: (%.2lf, %.2lf)\n", new_rect.pt1.x, new_rect.pt1.y);
    printf("pt2: (%.2lf, %.2lf)\n", new_rect.pt2.x, new_rect.pt2.y);
    printf("pt3: (%.2lf, %.2lf)\n", new_rect.pt3.x, new_rect.pt3.y);
    printf("pt4: (%.2lf, %.2lf)\n", new_rect.pt4.x, new_rect.pt4.y);
    
    return 0;
}

最后再给你几个检查步骤:

  • 逐个核对scanf里的格式符:所有double变量必须对应%lf
  • 检查每个scanf参数:是不是都加了&(如果是指针变量就不用,但这里是普通double成员,必须加)
  • 确认你操作的是正确的变量:是结构体里的成员,不是全局的同名变量
  • 可以用scanf的返回值排查问题:它会返回成功读取的变量个数,如果不是8,说明输入格式不对或者读取失败

内容的提问来源于stack exchange,提问作者Milo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:14:16