| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 870 人关注过本帖
标题:getcha简单问题
只看楼主 加入收藏
q370380556
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-28
结帖率:0
收藏
 问题点数:0 回复次数:12 
getcha简单问题
有关代码:
#include<stdio.h>

int main()
{
    char cChar1;        /*声明变量*/
    cChar1=getchar();    /*在输入设备得到字符*/
    putchar(cChar1);    /*输出字符*/
    putchar('\n');        /*输出转义字符换行*/
    getchar();            /*得到回车字符*/
    putchar(getchar());    /*得到输入字符,直接输出*/
    putchar('\n');        /*换行*/
    return 0;            /*程序结束*/
}

问题:getchar只能接收单字符 为什么强制输入了多字符以后 中间/*得到回车字符*/这一行以后就直接变成了两个回车符?  上面的getchar()难道会影响下面的getchar()?
搜索更多相关主题的帖子: include return 
2015-07-28 22:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
第一,现在绝大多数教材,包括外国的名著,都少见讲解流数据的原理,但却先教人使用流输入输出函数,结果初学者遇见最多的问题,正是这方面的。
第二,你的问题,取决于你输入时做的具体动作,那不是谁可以给你权威答案的。

最后,针对你的问题说,getchar()是流输入函数,它虽然是读入一个字符,但却是在你按下回车键之后才开始启动读取过程的,在此之前,无论你键入多少数据都可以,但所有键入的数据,都会堵塞在数据流管道中被依次处理,一个getchar()读入一个char,下一个getchar()或scanf()会接着读入堵住的那些数据,直到没有数据可以读入时,才停下来等待用户键入。换言之,你可以一次键入10个字符,但却是给代码中10个getchar()取的,不要以为程序遇到getchar()就必定会停下来等待输入,未必!

转义字符'\n',在不同系统、不同的文件模式中,有不同的字符数:它可能仅仅是ascii码0x0a,也可能是两个ascii码0x0c0a。所谓“转义字符”,就是这个意思,把两个字符组合转化成一个虚拟的字符'\n',欺骗你,实际上你并不清楚它到底是多少字节被你处理了——在某些时候这正是出错的原因,尤其在文件读写处理时。

授人以渔,不授人以鱼。
2015-07-28 23:00
q370380556
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-28
收藏
得分:0 
回复 2楼 TonyDeng
上面的代码我如果在getchar()输入两个AA 显示的就是
 AA
 A


下面的getchar并没有读取堵塞住的剩下一个A啊而是变成了回车而且有两个回车
2015-07-28 23:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回车也在流中

授人以渔,不授人以鱼。
2015-07-28 23:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用q370380556在2015-7-28 23:09:56的发言:

上面的代码我如果在getchar()输入两个AA 显示的就是
 AA
 A


下面的getchar并没有读取堵塞住的剩下一个A啊而是变成了回车而且有两个回车

上面的AA是你输入的,不是程序输出的,即不是putchar()出来的东西。

授人以渔,不授人以鱼。
2015-07-28 23:12
q370380556
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-28
收藏
得分:0 
回复 4楼 TonyDeng
  那它实际上每次是读取两个操作呃 字符+回车
2015-07-28 23:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你不要用AA来试,用AB来试,就看出点眉目了。

[ 本帖最后由 TonyDeng 于 2015-7-28 23:20 编辑 ]

授人以渔,不授人以鱼。
2015-07-28 23:15
q370380556
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-28
收藏
得分:0 
回复 7楼 TonyDeng
就是就是
2015-07-28 23:16
q370380556
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-28
收藏
得分:0 
回复 7楼 TonyDeng
谢谢你了    劳烦了你很多时间
2015-07-28 23:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你输入AA,流中有3个字符:'A','A','\n',第一个'A',被cChar1读到,也被putchar()出来,然后,程序自己輸出一个'\n',再做一次getchar()读入第二个'A',但这次没有被赋值,而是废弃了,然后,再做第三个getchar(),读入了'\n',这次被putchar()出来了,最后,还多輸出一个'\n',总共有3个'\n',光标停留在离第一次輸出的A下面两行处。

诸如光标在哪里、瞬间是怎么跳跃的(放慢动作加金睛火眼),等等,都要留意到,那也是信息。所谓善于观察,包括这个。

[ 本帖最后由 TonyDeng 于 2015-7-28 23:33 编辑 ]

授人以渔,不授人以鱼。
2015-07-28 23:19
快速回复:getcha简单问题
数据加载中...
 
   



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

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