【问题标题】:Assigning int to struct array but prints out as 0 (different) [closed]将 int 分配给结构数组但打印为 0(不同)[关闭]
【发布时间】:2020-10-28 18:59:36
【问题描述】:

我很抱歉标题不好,所以我的代码是这样的:


struct Point{
    double X,Y;
};

int main() {
    int i,j;
    struct Point arr[5];
    for(i=0;i<5;i++){
        arr[i].X=11;
        arr[i].Y=22;
    }
    for(i=0;i<5;i++){
        printf("%d- X = %d -- Y = %d\n",i+1,arr[i].X,arr[i].Y);
    }
    getchar();
    return 0;
}

作为输出我得到

1- X = 0 -- Y = 0
2- X = 0 -- Y = 0
3- X = 0 -- Y = 0
4- X = 0 -- Y = 0
5- X = 0 -- Y = 0 

但是当我查看 VSC 调试部分时,我发现我的 arr[0] 具有 X 和 Y 值,它们是正确的值。所以我假设存在打印问题,但无法弄清楚原因。

另外,我可能会遗漏很多关于 struct array 和将 int 分配给它们的信息,但请告诉我! 谢谢。

编辑:我在 vsc 调试屏幕上表示歉意,它显示时没有双数字,所以我认为使用 %d 是可以的.. 非常感谢!

【问题讨论】:

  • 尝试阅读printf 的文档。对于字符串中的 %d 占位符,它会说什么?它说什么应该是double 的占位符?

标签: arrays c struct


【解决方案1】:

您通过将错误类型的数据传递给printf() 来调用未定义的行为%d 期望 int,但您正在传递 double。您应该使用格式说明符%f%g%e%a 来打印double

在这种情况下,应使用格式指定器%.0f%g 打印而不打印点。

【讨论】:

  • 谢谢。完全是我的错。
【解决方案2】:

您的结构成员的类型为double,但您使用%d 格式说明符来打印它们,需要int

你想要%f:

printf("%d- X = %f -- Y = %f\n",i+1,arr[i].X,arr[i].Y);

【讨论】:

  • 成员没有float类型。
  • @MikeCAT 谢谢,已修复。
  • 谢谢。完全是我的错。
猜你喜欢
  • 2019-08-02
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多