首先声明:在键盘中敲入字符后,字符会首先保存在键盘缓冲区中供scanf函数读取(scanf。getchar等函数是读取缓冲区,getch函数是读取的控制台信息,即为直接从键盘读取)。另外特别注意键盘上敲入回车实际为“\r\n”,但存储到缓冲区时候会舍弃‘\r’而仅仅存储\n.比如我们敲入字符“12345回车”。缓冲区内存储的为“12345\n”.

文章中“_”代表空格

代码:

char *s;

scanf("%s",s);

printf("%s\n",s);

scanf("%s",s);

printf("%s\n",s);

例:

输入:123_345回车            “_”代表空格

输出:123

345

分析:对于scanf以%s格式输入时候。“空格、换行符、TAB”等是作为两个数据的分隔符存在的。即分隔符前后是两个数据,读入时候分隔符不读入。

例:

输入:123回车

456回车

输出:123

456

原因:如事例1,输入123回车后。缓冲区内存的是123\n。第一次读入后,缓冲区内仅仅剩余了\n,当第二次读入时候。\n是以分隔符存在的。不读入第二次的是。故缓冲区中是没有数据存在的,所以须要继续输入数据。

例:

输入:_回车                     “_”代表空格

这样的输入会要求一直输入,这是由于空格和\n都是分隔符。没有数据。所以没办法读入。

相同直接输入回车也是一直要求输入

代码:

char *s;

scanf("%s",s);

printf("%s\n",s);

scanf("%c",s);

printf("%d\n",*s);

例:

输入:1234_12回车                     “_”代表空格

输出:1234

32(空格的ASCII为32)

原因:对于第一个%s读入时遇到分隔符“空格”就停止,可是空格还是保存在缓冲区的。对于%c读入时候,“空格、\n、TAB”等是正常字符,所以第二次读入时候读取缓冲中的第一个字符“空格”。所以输出的是32.

事例2:

输入:123回车

输出:123

10(\n的ASCII为10)

原因:%s读入后缓冲中指剩下了\n故第二次以%c读入时候就读入了\n。输出为10.

转载于:https://www.cnblogs.com/wzzkaifa/p/6911650.html

C/C++ scanf 函数中%s 和%c 的简单差别相关推荐

  1. C语言中scanf()函数中的是什么

    困惑初学者的C语言中scanf()函数中的&到底是什么 对于初学者而言,肯定有过这样一个困惑:为什么在使用scanf函数输入数据时有时需要在参数前加一个&,而有时却不用. 在回答&qu ...

  2. scanf函数中输入格式及输入基本原理讲解

    前言:(本文所用测试全在vs2019) 本文主要是对 scanf函数输入中所需注意的形式,以及不同的格式下对于scanf函数输入的影响. scanf中基本原理的讲解,理解实现scanf函数的内部逻辑. ...

  3. 为什么scanf 函数中不能加\n

    当代码是scanf("%d\n",&a);时 如果你输入数字后一直按回车,scanf就会一直阻塞在那里,直到你再一次输入. 而且运行结果只会识别第一个数,不会识别第二个数. ...

  4. 关于main函数中argc和argv的简单介绍

    一般来说,刚开始学习写程序的人员经常会碰到如下形式的main函数,int main(int argc, char** argv)或者int main(int argc, char* argv[]),或 ...

  5. pythontk界面显示函数中的变量值_简单易学,西门子触摸屏3种修改变量值的方法!博图Wincc V14组态...

    应条友要求,今天分享3种修改触摸屏变量值的最常用方法! 全文约700字,通读4分钟! 看完本章,你将收获以下内容: 一:必会知识点:3种修改变量的方法及适用点 二:实例:3种方法修改触摸屏变量值 三: ...

  6. scanf()函数的用法和实践

    scanf()函数的用法和实践 摘要: 本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策. 关键词: scanf() 一 ...

  7. scanf函数详解与缓冲区

    1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...

  8. C++ scanf()函数安全性问题

    scanf()是C语言中的一个输入函数.与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>.(在有一些实现中,p ...

  9. scanf函数具体解释与缓冲区

    1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数.遇到文件结束返回EOF,出错返回0. 函数功能: sca ...

最新文章

  1. 微软职位内部推荐-SDEII
  2. WebService 的创建,部署和使用
  3. 【机器学习】太强了!这个建模神器可以玩一辈子
  4. 国内 GitHub 造假黑色产业链曝光;开源开发者撤销对 ICE 禁用的决定
  5. python鸭制作类代码_详细解释ducktyping鸭子类型程序设计与Python的实现
  6. C++ Custom Control控件 向父窗体发送对应的消息
  7. 计算机毕业设计的代码会查重吗,一般毕业论文会查重代码吗?
  8. python画微信公众号首图
  9. 常见WA错误总结(待更)
  10. nuc10黑苹果无法wifi上网
  11. 【NOIP2017提高A组集训10.25】嘟嘟噜
  12. react-shopping-cart尺码筛选
  13. 科目三 流程 记录 LTS
  14. 关于WinForm中Pannel的定位问题 May 18th, 2010
  15. java基础数据类型大小
  16. 刘海洋《LaTex入门》学习笔记2
  17. TiDB 悲观事务模式
  18. 球球音响机器人怎么合成的_球球大作战合成音响机器人孢子在哪合成
  19. XCode运行,提示build successed,无法启动模拟器
  20. 数据转换字符串 查字符串出现次数 位置返回字符串和操作方法 2021-05-26

热门文章

  1. python网络编程证书_python 网络编程——客户端
  2. OpenCV_01 简介+无版权安装+模块分析
  3. python网络爬虫系列(0)——爬虫概述 http协议复习
  4. 指令系统——数据寻址(2)(详解)
  5. python 动态属性和特性
  6. 流畅的Python 2. 数据结构 - 序列构成的数组
  7. LeetCode MySQL 1077. 项目员工 III
  8. LeetCode 549. 二叉树中最长的连续序列(树上DP)
  9. scrapy使用代理报错keyerror: proxy_爬虫Scrapy框架-Crawlspider链接提取器与规则解析器...
  10. java分治法求数列的最大子段和_Java十大经典排序算法动画解析和 代码实现