第二个 printf()输出为什么是乱码啊

michael_rong 2008-04-08 10:50:27
#include<stdio.h>
#include<string.h>
struct student{
int number;
char name[20];
float score;
};
void main(){
struct student stu[3]={{100,"rong",10},{101,"zhang",100},{102,"wo",99}};
struct student *p;


printf("\n NO. NAME SCORE");
for(p=stu;p<stu+3;p++)
printf("\n%-10d%-15s%6.0f",p->number,p->name,p->score);
printf("\n%-10d%-15s%6.0f",(*p).number,(*p).name,(*p).score);

}
...全文
362 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
musicaboy 2008-04-10
  • 打赏
  • 举报
回复
呵呵,我也是自学的
Chandler_Bing 2008-04-09
  • 打赏
  • 举报
回复
...
Alix-Lei 2008-04-09
  • 打赏
  • 举报
回复
应该把两个printf()用{}括起来就行了吧
lxhdj2008 2008-04-09
  • 打赏
  • 举报
回复
[color=#FF0000]如果改为10楼的那种方法,程序就运行OK了!请仔细查看程序!多修改程序,多测试程序![color]
michael_rong 2008-04-09
  • 打赏
  • 举报
回复
帖子好烫哦
lxhdj2008 2008-04-09
  • 打赏
  • 举报
回复
for(p=stu;p <stu+3;p++)
printf("\n%-10d%-15s%6.0f",p->number,p->name,p->score);


for(p=stu;p <stu+3;p++)
{
printf("\n%-10d%-15s%6.0f",p->number,p->name,p->score);
}

是等价的
printf("\n%-10d%-15s%6.0f",(*p).number,(*p).name,(*p).score);
}
是循环体外面的东西
由于执行完for循环后,p指向了数组结尾
再执行printf("\n%-10d%-15s%6.0f",(*p).number,(*p).name,(*p).score);
}时,指针值是不可预料的
ttkk_2007 2008-04-09
  • 打赏
  • 举报
回复
for(p=stu;p <stu+3;p++) {
printf("\n%-10d%-15s%6.0f",p->number,p->name,p->score);
printf("\n%-10d%-15s%6.0f",(*p).number,(*p).name,(*p).score);
}

ZiSheng 2008-04-09
  • 打赏
  • 举报
回复
貌似楼主该把两句用大括号括起来的
qiuqiu173 2008-04-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chenzhp 的回复:]
最后这一个printf语句中的p都不知道指向哪儿了。因为已经离开for语句。应该用括号括起来。


C/C++ codeprintf("\n NO. NAME SCORE");
for(p=stu;p <stu+3;p++)
{
printf("\n%-10d%-15s%6.0f",p->number,p->name,p->score);
printf("\n%-10d%-15s%6.0f",(*p).number,(*p).name,(*p).score);
}

}
[/Quote]
Cf251seuSuzsoft 2008-04-09
  • 打赏
  • 举报
回复
按lz的写法,p所指的已经超出了你所定义的数组范围,所指内容也就不知道是什么了
chenzhp 2008-04-09
  • 打赏
  • 举报
回复
最后这一个printf语句中的p都不知道指向哪儿了。因为已经离开for语句。应该用括号括起来。

printf("\n NO.      NAME           SCORE"); 
for(p=stu;p <stu+3;p++)
{
printf("\n%-10d%-15s%6.0f",p->number,p->name,p->score);
printf("\n%-10d%-15s%6.0f",(*p).number,(*p).name,(*p).score);
}

}
liyuzhu_1984 2008-04-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bhdgx 的回复:]
当for语句执行完后,p指向最后一个元素以后,如果要再次使用,因该将其重新赋值
[/Quote]
acaubjbx 2008-04-09
  • 打赏
  • 举报
回复
楼主改结帖了吧~
hazuki9902 2008-04-09
  • 打赏
  • 举报
回复
指针越界
Soulic 2008-04-09
  • 打赏
  • 举报
回复
当for语句执行完后,p指向最后一个元素以后,如果要再次使用,因该将其重新赋值
xk306 2008-04-09
  • 打赏
  • 举报
回复
基础知识
michael_rong 2008-04-09
  • 打赏
  • 举报
回复
谢谢大家 我是自学的 呵呵 所以不是那么系统的 以后还请大家多多关照啊 现在学到链表 和文件了的 觉得有点难 呵呵 但是我会坚持的
michael_rong 2008-04-09
  • 打赏
  • 举报
回复
我是刚入门的 在很多方面还不纯熟 谢谢你的建议
michael_rong 2008-04-09
  • 打赏
  • 举报
回复
怎么显示了有回帖啊 但是看不到回帖啊
heatel 2008-04-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 michael_rong 的帖子:]
#include <stdio.h>
#include <string.h>
struct student{
int number;
char name[20];
float score;
};
void main(){
struct student stu[3]={{100,"rong",10},{101,"zhang",100},{102,"wo",99}};
struct student *p;


printf("\n NO. NAME SCORE");
for(p=stu;p <stu+3;p++)
printf("\n%-10d%-15s%6.0f",p->number,p->name,p->score);
printf("\n%-10d%-15s%6.0f",(*p).number,(*…
[/Quote]

这个已经越界了:
printf("\n%-10d%-15s%6.0f",(*p).number,(*p).name,(*p).score);

它指向的是stu[3],但是stu[3]不存在
加载更多回复(5)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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