scanf输入问题
来源:互联网 发布:手机版电路设计 软件 编辑:程序博客网 时间:2024/06/16 11:30
scanf输入问题
编写UVa习题的时候,我发现使用scanf输入多个字符的区域总是会莫名其妙地停止运行,像下面这样。
接下来做几个小实验:
输入a b c
int main(){ char ch1,ch2,ch3; scanf("%c%c%c",&ch1,&ch2,&ch3); printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3); printf("ch1=%d,ch2=%d,ch3=%d\n",ch1,ch2,ch3); return 0;}
输入a b c
结果是:
结果很明显,空格被当作字符存入了ch2。
那么回车呢?
很明显,回车也被当作字符存入ch2了。
注:
scanf(“%c%c%c”,&ch1,&ch2,&ch3);
与
scanf(“%c”,&ch1);
scanf(“%c”,&ch2);
scanf(“%c”,&ch3);
等价!
那么要怎么解决这个问题呢?
方法一:
调用ctype.h头文件中的isalpha( )函数。
函数功能为判定字符是否为字母,这样就可以避免录入不必要的空格或回车。
int main(){ char ch1,ch2,ch3; while( scanf("%c",&ch1) && !isalpha(ch1)); while( scanf("%c",&ch2) && !isalpha(ch2)); while( scanf("%c",&ch3) && !isalpha(ch3)); printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3); printf("ch1=%d,ch2=%d,ch3=%d\n",ch1,ch2,ch3); return 0;}
同样输入”a b c”:
此时,结果正确。
方法二:
每次用scanf输入时调用“fflush(stdin);”。
功能是清空文件缓冲区,但副作用是不能在一行内输入所有字符了,需要分行输入。
int main(){ char ch1,ch2,ch3; fflush(stdin); scanf("%c",&ch1); fflush(stdin); scanf("%c",&ch2); fflush(stdin); scanf("%c",&ch3); printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3); printf("ch1=%d,ch2=%d,ch3=%d\n",ch1,ch2,ch3); return 0;}
下图我们可以看到,一行内输入确实不行了。
如果大家还有其它的方法解决这个问题,欢迎分享。
阅读全文
0 0
- scanf参数输入问题
- scanf输入数组问题
- scanf输入字符串问题
- scanf输入问题
- Scanf函数的输入问题
- scanf的安全输入问题
- scanf引出的输入缓冲区问题
- scanf读输入缓存引发的问题
- scanf输入时候的\n问题
- scanf输入格式的一些问题
- scanf输入字符和数字的问题
- OJ上scanf的输入问题
- OJ上scanf的输入问题
- scanf输入
- c之关于输入 scanf 和其他输入的问题
- c之关于输入 scanf 和其他输入的问题
- c语言中scanf输入带空格的字符串以及scanf输入单个字符的问题
- 标准输入缓冲给scanf()带来的问题
- 可变参数列表解析
- [大数据入门-linux]linux通过ssh连接时出现 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- 异常处理2 数组
- hihoCode 1249 A Math Problem ACM/ICPC 2015 Beijing (数位dp+规律)
- Oracle_SQL*Plus的使用(仅自己学习使用)
- scanf输入问题
- HTML基础(3.3 input)
- python virtualenv django 使用
- 12.9 省选训练总结3(2) DP的优化
- UE4 C++项目编译失败、打不开的解决方案
- HDFS数据副本存放策略
- Opencv之waitKey()
- Codeforces Round #448 (Div. 2) E. Eyes Closed(线段树)
- 优化Docker镜像大小方案