作者a75088285 (活在回忆中的回忆)
看板C_and_CPP
标题[问题] 一样的码结果不一样
时间Mon Mar 11 16:26:28 2019
开发平台(Platform): (Ex: Win10, Linux, ...)
VMware/fc8_fedora
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc
问题(Question):
两段程式码对照相同但是卡在scanf出现记忆体区段错误
喂入的资料(Input):
#include <stdio.h>
int main()
{
int x,y,z,x1,y1,z1;
x=2;y=1,z=3;
x1=x;y1=y;z1=z;
x=z1;y=x1;z=z1+y1;
printf("%d %d %d\n",x1,y1,z1);
printf("%d %d %d\n",x,y,z);
return 0;
}
#include <stdio.h>
int main (void)
{
int a;//-----------------这里造成错误的样子...
int x,y,z,x1,y1,z1/*,a*/;//------a放在里面就没问题,不懂为何冏
x=2;y=1;z=3;
printf("type in the days rabbits live\n");
scanf("%d",a);
// for(i=0;i<=a;i++)
// {
x1=x;y1=y;z1=z;
x=z1;y=x1;z=z1+y1;//think the order
// }
printf("%d %d %d\n",x1,y1,z1);
printf("%d %d %d\n",x ,y ,z );
//printf("after %d days, there are %d rabbits\n",n,x+y+z);
return 0;
}
预期的正确结果(Expected Output):
4
2 1 3
3 2 4
错误结果(Wrong Output):
4
程式记忆区段错误
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
补充说明(Supplement):
上述为两段码,第一段是除错用的对照,第二段是练习用的兔子增殖问题,
老师讲的原理我听不懂所以就照自己的想法打了这个,想法是东西就照字面
指定对应变数,然後变数的前值就多设一整组变数来抓,可能讲得很模糊,
题目的话是这样:
假设一对小兔子一个月後变中兔子,再一个月变大兔子,
再一个月每对大兔生一对小兔,设兔子不死的n个月後兔子总对数.
然後在验证for的时候一路除错结果发现这个,
我搞这个搞了一个下午了其他习题都没做冏冏冏,
问老师回答是我的变数顺序有误,要设一个temp给xyz用等等...
不过我怎麽想都不对,都特意多一整组变数了怎麽是顺序问题冏,
我以後会乖乖照老师的打,可不可以恳请指点我是缺了什麽观念冏
还有我现在是在资策会上课,用的是讲义配蔡明志老师的C Primer Plus,
有没有再简单一点的...
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.164.138.249
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1552292791.A.7CD.html
1F:推 jerryh001: scanf要&a 03/11 16:31
2F:推 CMJ0121: 查 man : the next pointer must be a pointer to int 03/11 16:32
4F:→ a75088285: 感谢囧,东改西改结果是这个没改… 03/11 17:05