%前有空格,%没有空格

scanf("%c",&c) 与 scanf(" %c",&c),后者只是在%前多了个空格,似乎没有什么区别,但使用起来区别是很大的。

scanf()作单字符输入时规定只接收一个字符,但它却把回车符也作为字符对待的。这个回车符是放在缓冲区的,但是空格却是直接忽略掉。

这就造成程序中第二次调用scanf("%c",&c)是从缓冲区中取一个字符,把第一次调用scanf("%c",&c)后输入的回车当作输入字符了。

这就在输入逻辑上造成了混乱。

有了scanf(" %c",&c)这个空格(换成\n或者\t也可以),这样就把缓冲区中的回车当成第一个字符,读取后丢掉。

#include <stdio.h>
int main()
{
char bla,blb;
scanf("%c",&bla);
scanf("%c",&blb);
printf("%c %c\n",bla,blb);
bla=bla+32;
blb=blb+32;
printf("%c %c\n",bla,blb);
getchar();
}

本次运行输入U Y结果如左图,本来应该显示: u    y

本次运行输入T R结果如左图,     本来应该显示:t      r

但每次结果都是*
分析原因:*(ASCII:42)  每输入U   Y    T    R时都回车,末尾都有换行,换行符(ASCII:10), 10+32=42,对应的字符是*

主要是输入 第一个字符后回车换行,存入键盘缓冲区,第二次使用scanf()时直接使用了换行符,根据换行符进行了计算,所以每次都出现*

解决方法:将“与%加个空格

#include <stdio.h>
int main()
{
char bla,blb;
scanf(" %c",&bla);
scanf(" %c",&blb);
printf("%c %c\n",bla,blb);
bla=bla+32;
blb=blb+32;
printf("%c %c\n",bla,blb);
getchar();
}

scanf(" %c\n",&bla);该语句一定不能添加\n,否则不能完成输入

c语言:scanf(" %c",&bla); scanf("%c",&bla); 语句差别的更多相关文章

  1. C语言第五节scanf函数

    变量的内存分析 字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的"字节"和"地址". 内存以"字节为单位" 0x表示的 ...

  2. C语言入门:05.scanf函数

    一.变量的内存分析 1.字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”. (1)内存以“字节为单位”

  3. Python 实现C语言 while(scanf("%d%d", &a, &b) != EOF) 语句功能

    reference:Python 实现C语言 while(scanf("%d%d", &a, &b) != EOF) 语句功能 在python中,无法通过input ...

  4. c语言中怎样用scanf()读入带空格的字符串?

    楼主 发表于: 2011-01-14 15:39:55 #include <stdio.h> int main(void){ int i; char a[5]; scanf("% ...

  5. 【C语言】05-printf和scanf函数

    一.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据 1.用法 1> pr ...

  6. 【C语言】03-printf和scanf函数

    一.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据 1.用法 1> pr ...

  7. 在C语言中连续使用scanf()函数出现的问题

    #include<stdio.h> int main() { ],*c; printf("input string:\n"); scanf("%c" ...

  8. C/C++编程笔记:C语言基础printf()和scanf()函数,大学入门知识

    在解释这两个函数之前,为了方便大家更容易理解,我们先来讲讲下面的这幅图. ​ 这个图中的例子其实很简单,我们就是把题目通过输入设备(例如键盘鼠标)传输到计算机中,然后让计算机进行运算得出结果,再然后把 ...

  9. C语言基础printf()和scanf()函数

    在程序的运行中,我们经常会进行一些输入输出的操作,用来实现交互.为此, C语言便给出了 printf() 函数和 scanf() 函数用来实现输入和输出两个动作. 其中,printf()函数用于向控制 ...

随机推荐

  1. Oracle的Rman差异增量备份

    所谓增量备份,顾名思义即是每次备份操作那些发生了"变化"的数据块.在RMAN增量备份中有两种:Differential(差异备份)和Cumulative(增量备份)方式.由于需求这 ...

  2. Python+Selenium - js操作

    js操作:日期框 本部分涉及两个知识点:DOM树和js DOM树教程链接: https://www.w3school.com.cn/htmldom/index.asp js教程链接 https://w ...

  3. TVM编译机器学习到 WASM 和 WebGPU

    TVM编译机器学习到 WASM 和 WebGPU TLDR TVM 深度学习编译器对 WASM 和 WebGPU 的支持.实验表明,TVM 的 WebGPU 后端在将模型部署到 Web 时可以接近原生 ...

  4. CPU消耗,跟踪定位理论与实践

    CPU消耗,跟踪定位理论与实践 一.性能指标之资源指标定位方案 1.打tprof报告方法 抓取perfpmr文件 60秒. perfpmr.sh 60 从结果文件中取出tprof.sum 或直接抓取t ...

  5. 狂神说Mybatis笔记

    环境说明: jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Junit 第一节:入门 什么是MyBati ...

  6. Centos8.3、mysql8.0主从复制实战记录

    引言 最近又上线了一个项目,感觉自己这段时间收获不少就想把自己做这个项目用的技术总结梳理一下.这个项目是我自己发起,领导们不是特别重视所以得到资源有限,资源有限的情况我只能选择手动搭建数据库环境,资源 ...

  7. 4.6 Python3 进阶 - 递归函数

    >>返回主目录 源码 # 定义及特性 # 简单递归思维练习,求和:1+2+3+-+100 # 思路:sum(100) = sum(99) + 100 # sum(99) = sum(98) ...

  8. 透彻理解USB总线应用之枚举

    Hello,大家好,今天我们来讨论一下USB总线中的枚举(Enumeration),首先简单介绍一下USB系统的基本架构,它由USB主机.USB设备与USB电缆(本文忽略它)组成,如下图所示: 最常见 ...

  9. 时光卷轴,Microsoft大事记

    Our mission is to empower every person and every organization on the planet to achieve more. 2021年6月 ...

  10. 14.4、web排错三部曲

    1.在客户端上ping服务器端ip : ping 服务器ip地址 :#排除线路问题: 2.在客户端上telnet服务器端Ip 端口号: telnet 服务器ip地址 端口号:#排除防火墙的影响: 3. ...