结构体初始化问题···

luoviking 2010-10-24 07:49:14
void main()
{
int i;
struct data{
int date;
float sugar[2][2];
}str[30]=
{
{1,{{5,8},{1,2}}},
{2,{{9,9},{4,3}}},
{3,{{6,9},{1,3}}},
{4,{{8,8},{3,2}}},
{5,{{7,7},{2,1}}}
};

for(i=0;i<5;i++)
{
printf("\n%d,%d,%d,%f,%f\n",(str+i)->date,(str+i)->sugar[0][0],(str+i)->sugar[0][1],(str+i)->sugar[1][0],(str+i)->sugar[1][1]) ;
}

}



对结构体的数组进行了初始化,为什么读出来的时候就只有了struct date 有数值???
...全文
129 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
boxxPCP 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 boxxpcp 的回复:]
先搞清楚结构体,指针,结构指针,数组名,二维数组名,指向数组的指针这些问题。
[/Quote]
建议看一看《C和指针》这本书。
boxxPCP 2010-10-27
  • 打赏
  • 举报
回复
先搞清楚结构体,指针,结构指针,数组名,二维数组名,指向数组的指针这些问题。
赵4老师 2010-10-25
  • 打赏
  • 举报
回复
没有最好,只有更好!
#include <stdio.h>
void main() {
int i;
static struct data {
int date;
float sugar[2][2];
} str[5]={
{1,{{5.0f,8.0f},{1.0f,2.0f}}},
{2,{{9.0f,9.0f},{4.0f,3.0f}}},
{3,{{6.0f,9.0f},{1.0f,3.0f}}},
{4,{{8.0f,8.0f},{3.0f,2.0f}}},
{5,{{7.0f,7.0f},{2.0f,1.0f}}},
};

for (i=0;i<5;i++) {
printf("%d,",str[i].date);
printf("%g,",str[i].sugar[0][0]);
printf("%g,",str[i].sugar[0][1]);
printf("%g,",str[i].sugar[1][0]);
printf("%g,",str[i].sugar[1][1]);
printf("\n");
}
}
AnYidan 2010-10-25
  • 打赏
  • 举报
回复
printf("\n%5d,%10f,,%10f,%10f,%10f\n",(str+i)->date,(str+i)->sugar[0][0],(str+i)->sugar[0][1],(str+i)->sugar[1][0],(str+i)->sugar[1][1]);
dodd_wang 2010-10-25
  • 打赏
  • 举报
回复
如六楼所说,LZ好好看看7楼大神的代码!
ruanxuewu0120 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhao4zhong1 的回复:]
对新手而言,任何时候,代码的可读性都是第一位的。

C/C++ code
#include <stdio.h>
void main() {
int i;
static struct data {
int date;
float sugar[2][2];
} str[30]={
{1,{{5,8},{1,2}……
[/Quote]
看起来就舒服多了
赵4老师 2010-10-24
  • 打赏
  • 举报
回复
对新手而言,任何时候,代码的可读性都是第一位的。
#include <stdio.h>
void main() {
int i;
static struct data {
int date;
float sugar[2][2];
} str[30]={
{1,{{5,8},{1,2}}},
{2,{{9,9},{4,3}}},
{3,{{6,9},{1,3}}},
{4,{{8,8},{3,2}}},
{5,{{7,7},{2,1}}},
};

for (i=0;i<5;i++) {
printf("%d,",str[i].date);
printf("%f,",str[i].sugar[0][0]);
printf("%f,",str[i].sugar[0][1]);
printf("%f,",str[i].sugar[1][0]);
printf("%f,",str[i].sugar[1][1]);
printf("\n");
}
}
we_sky2008 2010-10-24
  • 打赏
  • 举报
回复
printf原型是可变参数,在被调用的时候传递的是double(可变参数参数传递时有类型提升,所以float被提升为double)
而楼主的例子中从栈上取数据的时候取的是int, 这样的话抓取参数是就乱掉了
we_sky2008 2010-10-24
  • 打赏
  • 举报
回复

printf("\n%d,%f,%f,%f,%f\n",(str+i)->date,(str+i)->sugar[0][0],(str+i)->sugar[0][1],(str+i)->sugar[1][0],(str+i)->sugar[1][1]) ;

有两处:%d 改为 %f
we_sky2008 2010-10-24
  • 打赏
  • 举报
回复

printf("\n%d,%f,%f,%f,%f\n",(str+i)->date,(str+i)->sugar[0][0],(str+i)->sugar[0][1],(str+i)->sugar[1][0],(str+i)->sugar[1][1]) ;
xt0601 2010-10-24
  • 打赏
  • 举报
回复
这结构体看上去好复杂,头痛!!
ifengshow 2010-10-24
  • 打赏
  • 举报
回复
路过看看,我帮不上什么忙了
昵称很不好取 2010-10-24
  • 打赏
  • 举报
回复
把结构体放在main函数外面试试

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧