服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 解决C语言输入单个字符屏蔽回车符的问题

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

2021-10-11 11:47milanlover_xa C/C++

这篇文章主要介绍了解决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()来读取一次回车符号

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

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

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

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

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

1. 输入字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#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;
}

输入

?
1
2
3
2019
hello
world

输出

?
1
2
3
a = 2019
s1 = hello
s2 = world

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

2.输入字符

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#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;
}

输入

?
1
2
3
2019
A
B

输出

?
1
2
3
a = 2019
s1 =
s2 = A

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

解决办法

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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;
}

在格式串中过滤掉回车

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#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语言输入单个字符屏蔽回车符的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.51cto.com/simoniu/1419199

延伸 · 阅读

精彩推荐
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++c/c++内存分配大小实例讲解

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

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22