在创建”图”的时候我发现书上的一个问题,用for循环中用 scanf输入单个字符,很容易将第一次输入的’回车’赋值给下一个字符变量,而出错。我在TC、Win-TC、Gcc都试过了,都存在这个问题。
最后我用getche()代替了用scanf给字符变量赋值,就好了。(Thanks to 林峰)
书上:
for(i=0;ivexnum;i++)
scanf(“%c”,&G->vertex[i]);
for(k=0;karcnum;k++){
scanf(“%c,%c,%d”,&v1,&v2,&weight);
i=LocateVex_M(G,v1);
j=LocateVex_M(G,v2);
G->arcs[i][j].adj=weight;
}
我修改后的代码:
for(i=0;ivexnum;i++){
G->vertex[i]=getche();
printf(“t”);
}
for(k=0;karcnum;k++){
v1=getche();
printf(“t”);
v2=getche();
printf(“t”);
scanf(“%d”,&weight);
i=LocateVex_M(G,v1);
j=LocateVex_M(G,v2);
G->arcs[i][j].adj=weight;
}
现在慢慢体会到王聪所说的‘laji’book了,前几天发现了几个低级错误,简直怀疑他们贴这些代码前调试过没,还是没必要调试。同样代码运行结果和书上给给出的不一样,而且明显书上的错误着。代码中将两个字符变量名写反,无缘无故多出一个逗号-> ->
for(vj=0;vj<g.vexnum,;vj++)有点汗~~
当是买课本时老师一再强调要用高等教育出版社的,连清华也不行,莫非是为了提高我们的查错能里。终于明白了!
有人说这是tc的问题,一般在for里最好把scanf回避掉.
LikeLike
晕~~我们是学数据结构啊还是学查错啊~~
LikeLike
老师之所以强调用高教的课本,是因为在授课时,老师以这本书为教材,所有的内容都围绕着它来讲解.这也是根据学生的具体情况来作出的决定.若你们能够达到一定的水平,老师也就不会给你们指定教材,而只指定一些参考书.
LikeLike
赞同,我们的C语言书上也有些错误!
LikeLike
其实,一门科学研究到一定程度要求它的绝对完美,是很困难,甚至不可能的.
错误确实难免,其实我把它贴到这里也是为了课本的改进,加深自己的理解.
只有不断改错,不断总结,才能有所收获。
感谢郭老师指导.
LikeLike
全部错!
你们是不是没看过几本国外的书???
不是我崇洋媚外,国外的计算机书很少有错误,尤其是那些经典书籍(不信的话请去图书馆外文书库自由翻阅)。当然了,国外的书中也有错误,这很难避免。但是,请你们去看看人家是怎么对待错误的!!一些作者会在下一版更正错误,一些作者会在书/个人的网站上公布错误列表,而他们都对给他们指出错误的人予以特别感谢。CM的作者甚至给找出错误的人$2.56/错误的奖励!!
我们国内的呢?先说能像国外把书出到第7版的有几本?有多少作者愿意承认错误?又有多少作者真心地去感谢那些指出他错误的人?最起码我是没见过。
什么是差距?这就是差距!!这是态度问题,国内治学严谨的人太少!
LikeLike
错误并不可怕,可怕的是不愿意承认错误。我们应该永远感谢那些指出我们错误的人,他们才能真正地帮助我们进步!
在科学上,我们永远都把最高荣誉留给那些证明我们错了的人,在这里却……
LikeLike
cong哥让你寒心了。
LikeLike
I never ever post but this time I will,Thanks alot for the great blog.
LikeLike