解决C语言输入单个字符屏蔽回车符的问题

 更新时间:2020年12月10日 11:32:09   作者:milanlover_xa  
这篇文章主要介绍了解决C语言输入单个字符屏蔽回车符的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

C语言的scanf()函数在接收输入单个字符时会把上一次输入的回车符号当做这次输入的字符,造成无法正确的输入字符数据。这恐怕是初学C的童鞋门遇到的最头疼的问题了。

今天给大家提供四种解决方法供借鉴。

1、在scanf()中使用'\n'屏蔽回车符号。

scanf("%d\n",&n); //使用'\n'过滤回车

scanf("%c",&c);

2、在scanf()格式串最前面添加空格,屏蔽回车字符

scanf("%d",&n);

scanf(" %c",&c); //%c前面加空格,过滤回车

3、在接收字符前,使用getchar()来读取一次回车符号

scanf("%d",&n);
getchar(); //专门用来读取上次输入的回车符号
scanf("%c",&c);

4、在接收字符前,使用fflush()清空输入流中缓冲区中的内容

scanf("%d",&n)
fflush(stdin); //清空输入流缓冲区的字符,注意必须引入#include <stdlib.h>头文件
scanf("%c",&c);

好了,以后再也不用为这个问题烦恼了.....

补充知识:C语言中使用scanf()对字符(串)进行输入的问题

1. 输入字符串

#include<stdio.h>
int main() {
 int a;
 char s1[100];
 char s2[100];
 scanf("%d", &a);
 scanf("%s", s1);
 scanf("%s", s2);
 printf("a = %d\n", a);
 printf("s1 = %s\n", s1);
 printf("s2 = %s\n", s2);
 return 0;
}

输入

2019
hello
world

输出

a = 2019
s1 = hello
s2 = world

没有问题,因为scanf("%s")遇到换行符会自动跳过

2.输入字符

#include<stdio.h>
int main() {
  int a;
  char s1;
  char s2;
  scanf("%d", &a);
  scanf("%c", &s1);
  scanf("%c", &s2);
  printf("a = %d\n", a);
  printf("s1 = %c\n", s1);
  printf("s2 = %c\n", s2);
  return 0;
}

输入

2019
A
B

输出

a = 2019
s1 =
s2 = A

可以看到s1将2019后面的回车符'\n'吸收了,原因是scanf("%c")在读取单个字符时,空格和回车都被视为单个字符。

解决办法

使用getchar()吸收掉多余的回车

#include<stdio.h>
int main() {
 int a;
 char s1;
 char s2;
 scanf("%d", &a);
 getchar(); // 吸收"\n"
 scanf("%c", &s1);
 getchar(); // 吸收"\n"
 scanf("%c", &s2);
 printf("a = %d\n", a);
 printf("s1 = %c\n", s1);
 printf("s2 = %c\n", s2);
 return 0;
}

在格式串中过滤掉回车

#include<stdio.h>
int main() {
 int a;
 char s1;
 char s2;
 scanf("%d\n", &a); // 过滤掉回车
 scanf("%c\n", &s1);
 scanf("%c", &s2);
 printf("a = %d\n", a);
 printf("s1 = %c\n", s1);
 printf("s2 = %c\n", s2);
 return 0;
}

以上这篇解决C语言输入单个字符屏蔽回车符的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何利用C语言实现最简单的HTTP服务器详解

    如何利用C语言实现最简单的HTTP服务器详解

    这篇文章主要给大家介绍了关于如何利用C语言实现最简单的HTTP服务器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • bloom filter概念讲解以及代码分析

    bloom filter概念讲解以及代码分析

    Bloom filter 优点就是它的插入和查询时间都是常数,另外它查询元素却不保存元素本身,具有良好的安全性
    2013-09-09
  • C语言实现扫雷游戏(可以自动展开)

    C语言实现扫雷游戏(可以自动展开)

    这篇文章主要为大家详细介绍了C语言实现扫雷游戏,可以自动展开,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C语言 操作符分类解析与使用

    C语言 操作符分类解析与使用

    C 语言提供了丰富的操作符,有:算术操作符,移位操作符,位操作符,逻辑操作符,逗号表达式。让我们通读本篇来详细了解吧
    2021-11-11
  • 浅谈c++的编译和运行

    浅谈c++的编译和运行

    下面小编就为大家带来一篇浅谈c++的编译和运行。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。
    2021-11-11
  • C++ std::list的merge()使用方式与分析

    C++ std::list的merge()使用方式与分析

    这篇文章主要介绍了C++ std::list的merge()使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • C语言学生学籍管理系统课程设计

    C语言学生学籍管理系统课程设计

    这篇文章主要介绍了C语言学生学籍管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++ OpenCV裁剪图片时发生报错的解决方式

    C++ OpenCV裁剪图片时发生报错的解决方式

    在图像处理中,我们经常根据需要截取图像中某一区域做处理,下面这篇文章主要给大家介绍了关于C++ OpenCV裁剪图片时发生报错的解决方式,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • c++中map的基本用法和嵌套用法实例分析

    c++中map的基本用法和嵌套用法实例分析

    这篇文章主要介绍了c++中map的基本用法和嵌套用法,以实例形式分析了map容器的基本使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01

最新评论