关于for循环中用 scanf输入单个字符

在创建”图”的时候我发现书上的一个问题,用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++)有点汗~~

当是买课本时老师一再强调要用高等教育出版社的,连清华也不行,莫非是为了提高我们的查错能里。终于明白了!

9 thoughts on “关于for循环中用 scanf输入单个字符

  1. 老师之所以强调用高教的课本,是因为在授课时,老师以这本书为教材,所有的内容都围绕着它来讲解.这也是根据学生的具体情况来作出的决定.若你们能够达到一定的水平,老师也就不会给你们指定教材,而只指定一些参考书.

    Like

  2. 其实,一门科学研究到一定程度要求它的绝对完美,是很困难,甚至不可能的.
    错误确实难免,其实我把它贴到这里也是为了课本的改进,加深自己的理解.
    只有不断改错,不断总结,才能有所收获。
    感谢郭老师指导.

    Like

  3. 全部错!
    你们是不是没看过几本国外的书???
    不是我崇洋媚外,国外的计算机书很少有错误,尤其是那些经典书籍(不信的话请去图书馆外文书库自由翻阅)。当然了,国外的书中也有错误,这很难避免。但是,请你们去看看人家是怎么对待错误的!!一些作者会在下一版更正错误,一些作者会在书/个人的网站上公布错误列表,而他们都对给他们指出错误的人予以特别感谢。CM的作者甚至给找出错误的人$2.56/错误的奖励!!
    我们国内的呢?先说能像国外把书出到第7版的有几本?有多少作者愿意承认错误?又有多少作者真心地去感谢那些指出他错误的人?最起码我是没见过。
    什么是差距?这就是差距!!这是态度问题,国内治学严谨的人太少!

    Like

  4. 错误并不可怕,可怕的是不愿意承认错误。我们应该永远感谢那些指出我们错误的人,他们才能真正地帮助我们进步!
    在科学上,我们永远都把最高荣誉留给那些证明我们错了的人,在这里却……

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.