标题:【自学菜鸟】00001---{字符常量}----(问题在5楼解决,楼主在6楼添加心得, ...
只看楼主
s158298261
Rank: 1
来 自:郑州
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-28
结帖率:0
 问题点数:0 回复次数:9 
【自学菜鸟】00001---{字符常量}----(问题在5楼解决,楼主在6楼添加心得,欢迎讨论)
编译环境:     vc++6.0


程序:

-----------------------------------------------------------------
main()
{
on: char a,b;
    scanf ("输入字母:%c",&a);
    printf ("ascII码为:%d",a);
    scanf ("是否继续?%c",&b);
    if (b='y') goto off;else goto on;
off:;
}
-----------------------------------------------------------------


错误信息:       error C2065: 'b' : undeclared identifier


请大大指教~



[ 本帖最后由 s158298261 于 2009-12-29 09:35 编辑 ]
搜索更多相关主题的帖子: 心得 楼主 常量 字符 
2009-12-28 18:32
fqtb16
Rank: 7Rank: 7Rank: 7
来 自:上海
等 级:黑侠
帖 子:96
专家分:504
注 册:2009-12-28
得分:0 
if (b=='y') goto off;else goto on;

爱拼才会赢
2009-12-28 18:37
xixistudio
Rank: 2
等 级:论坛游民
帖 子:24
专家分:53
注 册:2009-12-23
得分:0 
编译没什么问题,逻辑有问题。
2009-12-28 18:41
s158298261
Rank: 1
来 自:郑州
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-28
得分:0 
额。。。首先感谢2楼,确实没发现==问题,

但是错误提示应该是没定义b,不过我char a,b;了啊。。。

额。。。3楼,逻辑问题?如果把最后一句改成if (b='y') break;else goto on;

是不是就没有逻辑问题了?

我原来是学basic的,现在自学c,难免有些习惯难改。。。比如很不适应没有行号。。。
2009-12-28 18:46
xu362726904
Rank: 6Rank: 6
等 级:侠之大者
帖 子:160
专家分:471
注 册:2009-6-18
得分:0 
#include"stdio.h"
main()
{
    char a,b;
   on :
    scanf ("%c",&a);
    getchar();
    printf ("ascII码为:%d",a);
     printf ("是否继续?");
    scanf ("%c",&b);
    getchar();
    if (b=='y')  goto on;
    else goto off;
off :
;
}

是你的输入语句有问题,还有行号写在数据申明的后面

[ 本帖最后由 xu362726904 于 2009-12-28 18:53 编辑 ]
2009-12-28 18:50
s158298261
Rank: 1
来 自:郑州
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-28
得分:0 
谢谢楼上!明白3楼的逻辑错误的意思了~谢谢大家~学习的路上有你们陪!很高兴!



看了楼上的解答,一直有一个问题没有想明白,那就是两个getchar();是干嘛的,是否多余。
后来上机证明没有两个getchar()确实不行。想了很久没有想明白为什么。


晚上查阅了谭浩强的书,终于明白了两个getchar()的用处。

可能高手们觉得这根本没什么,但是对于新手来说,这个问题如果没人解释,很久都不会懂,跟大家分享一下。

xu362726904大人的程序:
------------------------------------------------
#include"stdio.h"
main()
{
    char a,b;
   on :
    scanf ("%c",&a);
    getchar();
    printf ("ascII码为:%d",a);
     printf ("是否继续?");
    scanf ("%c",&b);
    getchar();
    if (b=='y')  goto on;
    else goto off;
off :
;
}

--------------------------------------------------

由于没理解getchar()的用处,我第一次改过来的程序为:
-------------------------------------------------
#include"stdio.h"
main()
{
    char a,b;
   on :
    printf ("输入字母:");
    scanf ("%c",&a);
    printf ("ascII码为:%d",a);
     printf ("是否继续?");
    scanf ("%c",&b);
    if (b=='y')  goto on;
    else goto off;
off :
;
}

-------------------------------------------------
运行,

输入字母:a(回车)
ascII码为:97
是否继续?输入字母:a(回车)
ascII码为:10
是否继续?输入字母:

-------------------------------------------------
问题出现了。没有让输入是否继续就直接goto on;了。。。
加上了getchar()之后,问题解决。程序正常。


查阅了谭老的书之后明白了原因。
scanf ("%c",&a);
开始输入,a(回车)
于是“a”分配给变量a
程序执行到第二个scanf ("%c",&b);
(回车)分配给变量b,(回车)的ascII码为10,在c语言中,char的变量的字符是以0-255的值存在变量里的,所以才能%d%c互用,显然,b!='y',所以goto on;
再次执行scanf ("%c",&a);
于是程序死循环。。。


于是需要加上getchar()“吃掉”回车。
希望对新手有用~反正我是学到了不少东西。

最后用谭老的话总结:

“一个函数中如果有几个scanf函数,再输入数据时往往会出现一些想象不到的情况,其中一个重要原因就是由回车符引起的,c语言很灵活,书上不可能把一切细节都讲到,读者在遇到类似情况时,上机多试验一下就可以找出规律来。”----------《c程序设计题解与上机指导(第二版)》谭浩强。


----------------------------------

谢谢论坛,给我们这些自学的人找到了良师益友。
我的【自学菜鸟】会持续更新,望各位大侠不要吝惜赐教!

再次拜谢。


[ 本帖最后由 s158298261 于 2009-12-29 09:32 编辑 ]
2009-12-28 18:54
满天樱花
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-12-29
得分:0 
数字的ascII码?在哪有表?
2009-12-29 08:15
xu362726904
Rank: 6Rank: 6
等 级:侠之大者
帖 子:160
专家分:471
注 册:2009-6-18
得分:0 
每本C语言书的附录里有
2009-12-29 09:19
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
得分:0 
scanf ("是否继续?%c",&b);  在VC里面还能这样用啊?????
2009-12-29 09:29
s158298261
Rank: 1
来 自:郑州
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-28
得分:0 
以下是引用李若斌在2009-12-29 09:29:49的发言:

scanf ("是否继续?%c",&b);  在VC里面还能这样用啊?????
这正是我的另一个错误。。。。想当然了,以为和printf一样了~呵呵惭愧惭愧。。。
2009-12-29 09:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-294511-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.710315 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved