| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1126 人关注过本帖
标题:关于用scanf输入字符的问题
只看楼主 加入收藏
c718382171
Rank: 2
等 级:论坛游民
帖 子:32
专家分:41
注 册:2013-12-21
收藏
得分:2 
当只有一个%c的时候,在前面有空格的话,他就会读取空格。当大于一个%c或者%s或%d之类的,就埋关系了
2013-12-26 23:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用c718382171在2013-12-26 23:39:40的发言:

当只有一个%c的时候,在前面有空格的话,他就会读取空格。当大于一个%c或者%s或%d之类的,就埋关系了

如果輸入的多餘字符不是空格呢?不要想當然,以為你用%c來scanf(),敲鍵盤的用戶就會乖乖地只敲一個字符加點回車、空格給你scanf(),他可能會敲任意不確定的字符和文本到輸入緩衝區中再灌給你,如果不學會用這種態度對待人機交互,做ATM機的就死翹翹了。

[ 本帖最后由 TonyDeng 于 2013-12-26 23:45 编辑 ]

授人以渔,不授人以鱼。
2013-12-26 23:41
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:0 
回复 10楼 TonyDeng
所以我说“一般情况下”,具体要用多少个,确实没有固定的标准,只能根据具体代码具体分析。

本人QQ:775420425
2013-12-27 00:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用hjxlj在2013-12-27 00:09:16的发言:

所以我说“一般情况下”,具体要用多少个,确实没有固定的标准,只能根据具体代码具体分析。

這就是人家開發fflush()非標準擴展函數的原因。

授人以渔,不授人以鱼。
2013-12-27 00:11
IceSource
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:37
专家分:139
注 册:2013-12-3
收藏
得分:2 
程序代码:
int main()
{
    char a;
    scanf(" %c", &a); //语句1
    printf("%c", a);
    return 0;
}
所加空格属于空白符(空白符可以是空格(space)、制表符(tab)和新行符(newline))
其作用是:使sanf()从输入流中读入第一个非空白符
上述代码实例:
input:    s
output:s
2013-12-27 09:32
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:2 
膜拜大神

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-27 09:52
ljx小子
Rank: 8Rank: 8
来 自:星星
等 级:蝙蝠侠
威 望:2
帖 子:222
专家分:916
注 册:2013-10-7
收藏
得分:2 
版主大人说的这种情况值得引起注意

。。。。。。。。。。。
2013-12-27 10:36
xiaozi2013
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:四川成都
等 级:蒙面侠
威 望:6
帖 子:830
专家分:4331
注 册:2013-12-13
收藏
得分:2 
---------从未遇见---------
---------但--- 值得谨记---------

--整天敲那些破代码能找着媳妇儿吗。。。---
2013-12-27 12:08
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:2 
scanf
getchar
之类的函数 都是从同一个 stdin 读取数据

对于 scanf %c %[] 之外的情况 会把回车字符滞留在 stdin 里面
后面读取 scanf %c getchar 读取数据的时候 直接把\n 读走
导致出错

而scanf 的格式控制字符串里面的 空格 有匹配连续空白字符[\n\t\v空格...]的作用
" %c" 会先把stdin里面 第一个非空白字符之前的空白字符全部清空

https://zh.
2013-12-27 13:54
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
可读性就是 a * 256 比 a << 8 清晰得多!生成后者机器码可由编译器优化代劳,而不应该是程序员做的事。程序员写的代码是给人看的,不是把读程序代码的人当作机器

这句话 粗看好像有点道理
但是 位移运算符 常见的运用场景却是
32bit
00000000 000000000 00000000 00011000
运算之后得到
00000000 000000000 00011000 00000000

这时候 明显 << 8 比* 256 清晰多了

https://zh.
2013-12-27 13:56
快速回复:关于用scanf输入字符的问题
数据加载中...
 
   



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

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