关于scanf("%c",&ch)直接跳过的问题
printf("请输入一个年份:\n");
scanf("%d",&year);
// setbuf(stdin,NULL);//或者直接用getchar();
//在键盘输入一字符,显示其类型(数字、大写字母、小写字母、其他)
char ch;
printf("请输入一个字符:\n");
scanf("%c",&ch);
if(ch>='1'&&ch<='9')
printf("this is digital\n");
else if (ch>='A'&&ch<='B')
printf("this is capital letter\n");
else if (ch>='a'&&ch<='z')
printf("this is letter\n");
else
printf("other!\n”);
2000
请输入一个字符:
other!
{
printf("请输入字符串长度:\n");
scanf("%d",&n);
}
setbuf(stdin,NULL); //<1>
char a[n],b[n];
printf("输入字符串:\n");
for (int i=0; i<n; i++)
{
scanf("%c",&a[i]);
}
printf("输出字符串为:\n");
for (int i=0; i<n; i++)
{
b[i]=a[n-1-i];
printf("%c",b[i]);
}
5
输入字符串:
hello
输出字符串为:
lleh
纠其根源,我们先来了解一下scanf()是怎么接受数据的。
首先,当我们的pc指向scanf这句时,系统并不是等待用户输入,而是判断输入缓冲区有没有符合格式的内容,如果有,则直接读取。
知道了这个,我就应该明白,scanf("%c",&ch);不是没有读到数据,而是读到了我们不知道的数据。
那问题又来了,它读到了什么??
好吧,这就要说到行缓存;
我们用scanf()的时候都要按下enter键,那enter键按了之后去哪儿了??
好吧,问题基本应该知道了,enter键也进入了输入缓存区,也就是scanf("%c",&ch);
读到了'\n';
解决办法,很简单,既然缓存区有东西,那我们就清空它呗~~
setbuf(stdin,NULL);(这个windows和linux下都可以)
fflush(stdin);(这个只能windows);
关于scanf("%c",&ch)直接跳过的问题的更多相关文章
- scanf,sscanf利用format跳过干扰的空格
scanf,sscanf利用format跳过干扰的空格 用了一点时间做读取配置部分的代码,希望一次记录上读取N个数据, 希望读取的格式就是一个IP地址加上端口号,希望把IP地址读取到4个短整数里面,端 ...
- scanf("%c", &ch)和scanf(" %c", &ch)和scanf("%s", str)的注意事项
scanf("%c", &ch)和scanf(" %c", &ch): %c会读取回车和空格,所以一定要使用后者,即在%c前面加一个空格. %s ...
- scanf函数与输入缓冲区
本文链接:http://www.cnblogs.com/xxNote/p/4008668.html 今天看书的时候遇到scanf函数与缓冲区的问题,产生了一些猜想即:应该有一个指针来记录缓冲区中读取到 ...
- scanf的一些技巧
一.scanf和gets 1.不同点: char string[50]; scanf("%s",string); //当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是 ...
- printf与scanf的返回值、注意点
printf()的返回值为其输出字符串常量的字符数(注意字符数与字数的区别)注意计数针对所有的打印字符,包括空格和不可见的换行字符(不包括字符串的空字符). scanf()函数返回成功读入的项目的个数 ...
- scanf 与 cin 的区别
在论坛上看到有人提出一个如下的问题,在此总结一下. 原问题: http://topic.csdn.net/u/20110414/22/90d0606c-9876-48e4-9b69-bd8bd8a41 ...
- [笔记]scanf的使用(主要是针对char)
学的是C++,用cin cout也用的很顺溜,写自己的类时重载"<<"与">>"运算符也很爽,但是发现在刷算法竞赛题时,cin cout ...
- 青蛙跳台阶(C、Python)
C语言: /* ----------------------------------- 当n = 1, 只有1中跳法:当n = 2时,有两种跳法:当n = 3 时,有3种跳法:当n = 4时,有5种跳 ...
- C Primer Plus学习笔记(六)- C 控制语句:分支和跳转
if 语句: if 语句被称为分支语句(branching statement)或选择语句(selection statement) if 语句的通用形式: if (expression) state ...
随机推荐
- oracle误删除数据的恢复方法
学习数据库时,我们只是以学习的态度,考虑如何使用数据库命令语句,并未想过工作中,如果误操作一下,都可能导致无可挽回的损失.当我在工作中真正遇到这些问题时,我开始寻找答案. 今天主要以oracle数据库 ...
- CentOS6.4中安装Python-Pip 以及Phyton gevent
一.安装Phyton-pip 首先要安装 Setuptools wget --no-check-certificate https://pypi.python.org/packages/2.6/s/s ...
- Memcached管理
安装memcached服务端: apt-get install memcached 配置文件存在于: /etc/memcached.conf 启动memcache: memcached -d -m - ...
- ORA-600[kcratr_scan_lastbwr]逻辑坏块解决
数据库版本: 11.2.0.3 问题现象: 今天在启动一台测试数据库的时候,发现db不能open,报错如下: ERROR at line 1: ORA-00600: internal error co ...
- binaryTree:普通二叉树
#ifndef _Tree_H #define _Tree_H typedef int ElementType; typedef struct TreeNode { ElementType Eleme ...
- cocos2dx3.3在Windows环境搭建以及新工程创建
这个虽然比较简单,但是是学习cocos的第一步,不积跬步无以至千里,所以今天先分享Windows下环境搭建问题.关于mac搭建后续有机会在写(ps:因为我暂时没有mac),anyway,开始吧! 首先 ...
- 游戏基础元素之精灵——Cocos2d-x学习历程(九)
1.创建精灵 在实际使用中,精灵是由一个纹理创建的.在不加任何设置的情况下,精灵就是一张显示在屏幕上的图片.通常精灵置于层下,因此我们首选在层的初始化方法中创建精灵,设置属性,并添加到层中. 有多种方 ...
- js闭包陷阱问题
JavaScript是一种非常强大的函数式编程语言,可以动态创建函数对象. 由于JavaScript还支持闭包(Closure),因此,函数可以引用其作用域外的变量,非常强大. 来看看在JavaScr ...
- 3D项目处理点选操作步骤
1.用notepad++模型的obj格式文件,查找到模型各个部分的名称,命名规则:g mesh......,把名字改为规则命名. 2.选择处理 #ifdef _DEBUG #pragma comm ...
- Python核心编程笔记--unicode编码
#定义编码方式,与物理文件. code='utf-8'file='D:/utf8.txt' #把编码后的字符写入文件. hello_out =u'hello world'bytes_out =hell ...