| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2154 人关注过本帖
标题:复习《字符输入/输出和输入确认》的一点总结
只看楼主 加入收藏
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
结帖率:96.15%
收藏
已结贴  问题点数:20 回复次数:5 
复习《字符输入/输出和输入确认》的一点总结
本文总结来自C Primer Plus第五版第八章[字符输入/输出和输入确认]
特别鸣谢@ehszt@书生牛犊@liululu001还有其他给我回帖提供帮助的大神~
在我目前所编译的大部分程序中,在链接器上输入字符,并且在按下回车键前什么也不会发生。

为什么一定要按下回车键才会出现回显呢?
原因在于系统将程序员输入的字符收集并存储在一个被称为缓冲区的临时存储区域中。按下回车键,便可使键入的字符块对正在等待的程序变为可用。

那么为什么需要缓冲区呢?
原因在于,首先,将若干字符作为一个块传输比逐个发送这些字符耗费的时间少。其次,如果输入有误,就可以使用键盘来更正功能来修正错误。因此,当最终按下回车键时,就可以发送你想要的输入了。

计算机操作系统需要某种方式来断定每个文件起始和结束的位置。而检测文件结尾的一种方法是在文件中防治一个特殊字符来标志结尾。C的处理方法是让getchar()函数在到达文件结尾时返回一个特殊值,而不去管操作系统时如何检测文件结尾的。赋予该值的名称是EOF(End Of File)。scanf()函数在监测到文件结尾时也返回EOF。(EOF的含义如前面的英文释义所示,表示文件的结尾。因此在实际程序编译中,需要读取一串字符到某个字符停止,则该值赋予EOF,如getchar() != ‘q’,此处字符q表示读取到q字符的时候便停止读取,进入程序的下一部分)

输入流和数值
考虑如下所示的一行输入:
is 28 12.4
一般人看到这行会认为该输入是一串字符后面跟着一个整数,然后是一个浮点值。燃鹅,对于程序猿来说(憋瞅瞅,说的就是你),该输入是一个字节流。第一个字节是字母i的i 符编码,第二个字节是字母s的字符编码,第三个字节是空格字符的字符编码,第四个字节是数字2的字符编码,等。在读取输入的时候要非常注意输入的空白字符(空格字符,制表符及换行符)。

下面是几个常用的简易模块函数,分享一下
get_int()函数主要是在主函数里读取正确的整数,剔除错误输入用的
get_int()
{
int put;
char chl

while(scanf("%d", &input) != 1)
{
while((ch = getchar() != '\n')
putchar(ch);//剔除错误输入
printf(" is not an integer.\nPlease enter an ");
}
return input;
}

get_first()函数是用来读取字符串中的第一个字符并剔除掉剩余的字符
char get_first(void)
{
int ch;

ch = getchar();
while(getchar() != '\n')
continue;//这一步很关键!剔除输入流里的剩余字符!
return ch;
}



搜索更多相关主题的帖子: 自行车 
2016-08-23 23:02
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:10 
程序代码:
char get_first(void)
{
int ch;

ch = getchar();
while(getchar() != '\n')
continue;//这一步很关键!剔除输入流里的剩余字符!
return ch;
}


continue; 语句是可以不写的,直接 while(getchar() != '\n') 即可,

Read The Fucking Source Code~
2016-08-24 00:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
文字中说了EOF,但代码中没有体现,要么别人想结束但结束不了,要么陷入死循环,却决于控制台或终端怎么处理了。
2016-08-24 08:18
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 3楼 rjsp
代码中的终止字符如“getchar() != ‘\n’”这里\n不就表示EOF的含义吗
2016-08-24 11:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
以下是引用Eahonxu在2016-8-24 11:14:32的发言:

代码中的终止字符如“getchar() != ‘\n’”这里\n不就表示EOF的含义吗
你在顶楼写的文字是拷贝/粘贴过来的,自己没看过?
2016-08-24 11:21
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 5楼 rjsp
这是我自己理解的啊
2016-08-24 11:39
快速回复:复习《字符输入/输出和输入确认》的一点总结
数据加载中...
 
   



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

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