当前位置: 首页 > news >正文

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()来读取一次回车符号

scanf("%d",&n);

getchar(); //专门用来读取上次输入的回车符号

scanf("%c",&c);

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

scanf("%d",&n)

fflush(stdin); //清空输入流缓冲区的字符,注意必须引入#include 头文件

scanf("%c",&c);

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

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

1. 输入字符串

#include

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

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

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

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语言输入单个字符屏蔽回车符的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2020-12-10

相关文章:

  • 二分法查找字符串 c语言,c语言二分法如何实现查找数组元素
  • c++语言常量,C++常量(constant)
  • 64平台的c语言int类型值比32平台大,C语言数据类型32位和64位不同
  • c语言输入10个数从小,C语言中,从键盘输入10个数,从小到大排列输出,怎
  • 得到 android组件,android 获取HOME组件的Activity信息
  • android studio视频路径,Android studio相关设置及实现存在于工程目录中的视频播放...
  • android wear 1.6,玩的就是情怀 外国网友将CS 1.6移植到了Android Wear上
  • ability鸿蒙,Day8 鸿蒙,一个Ability全家桶究竟包括了什么(一)
  • Android网页文字进度,Android webview 进度显示
  • android仿qq侧滑删除,Android仿QQ微信侧滑删除效果
  • html 重置样式表,CSS 浏览器样式重置终结版
  • 压缩html源文件,js代码压缩还原详解
  • html5随机选取文本框,HTML5交互式电子邮件(带输入框和选择框)
  • html格子切换效果图,(HTML)关于格子流布局方案可以如此设计
  • android密码设成星号,将EditText密码掩码字符更改为星号(*)
  • [Vue CLI 3] 配置解析之 css.extract
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 2017-08-04 前端日报
  • 2017-09-12 前端日报
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • JS数组方法汇总
  • Objective-C 中关联引用的概念
  • Redis字符串类型内部编码剖析
  • Selenium实战教程系列(二)---元素定位
  • supervisor 永不挂掉的进程 安装以及使用
  • 编写符合Python风格的对象
  • 初识MongoDB分片
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 两列自适应布局方案整理
  • 日剧·日综资源集合(建议收藏)
  • 译米田引理
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • ###C语言程序设计-----C语言学习(3)#
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)Nginx简介和安装教程
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (MATLAB)第五章-矩阵运算
  • (二十三)Flask之高频面试点
  • (二十四)Flask之flask-session组件
  • (分布式缓存)Redis哨兵
  • (分类)KNN算法- 参数调优
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (三)SvelteKit教程:layout 文件
  • (转)【Hibernate总结系列】使用举例
  • (转)VC++中ondraw在什么时候调用的
  • (转)四层和七层负载均衡的区别
  • .FileZilla的使用和主动模式被动模式介绍
  • @Builder用法
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [\u4e00-\u9fa5] //匹配中文字符
  • [20190416]完善shared latch测试脚本2.txt
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [AIGC] Kong:一个强大的 API 网关和服务平台