这段代码什么含义?为什么运行结果和我想的不一样?

[复制链接]
查看11 | 回复3 | 2011-8-9 18:17:59 | 显示全部楼层 |阅读模式
#include
typedef struct
{char s[10];
int t;
}ST;
getdata(ST *p)
{ scanf("%s,%d\n",p->s,&p->t);}
int main(void)
{
ST a;
getdata(&a);
printf("%s,%d\n",a.s,a.t);
}
运行的结果如图所示
这个结构体只定义了char类型的数组和一个整型数,数组有10个容量,为什么输入的字符多于10个的时候一样可以显示呢?还有,在显示完nihaonihao,2之后,那一大串数字是什么?请高人解答下,这段代码到底什么含义


回复

使用道具 举报

千问 | 2011-8-9 18:17:59 | 显示全部楼层
问题就出在你在getdata函数中写的scanf函数里,应该写成scanf("%s%d",p->s,&p->t);在scanf中不要乱写字符,否则你输入的时候就一定得输入,而且你前面要输入的还是一个符串,%s是非常要注意的,那一大串数字其实是因为你没有给t变量赋初值,所以才会打出的拉圾值#includetypedef struct{
char s[10];
int t;}ST;//定义一个结构体getdata(ST *p){
scanf("%s%d",p->s,&p->t);//因为S是一个数组,所以前面不用加&符号}int main(void){
ST a; //定义...
回复

使用道具 举报

千问 | 2011-8-9 18:17:59 | 显示全部楼层
在scanf中,如果两个输入参数类型不一致的时候,最好避免使用非空格一类的间隔符(这里面就是那个逗号了)。LZ输入的测试用例是“nihaonihao,2” ,其实这个语句把这个“nihaonihao,2”都作为字符串存储到了s[10]中了,而t中没有初始化和赋值,所以是一个编译器随机分配的整形块。结果出现的那种情况,其实前面是s,后面就是t的那个值了。还...
回复

使用道具 举报

千问 | 2011-8-9 18:17:59 | 显示全部楼层
见图片...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行