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语言中字符的输入输出以及计算字符个数的方法详解,包括了C语言中字符的输入输出以及计算字符个数的方法详解的使用技巧和注意事项,需要的朋友参考一下 C语言字符输入与输出 标准库提供的输入/输出模型非常简单。无论文本从何处输入,输出到何处,其输入/输出都是按照字符流的方式处理。文本流是由多行字符构成的字符序列,而每行字符则由 0 个或多个字符组成,行末是一个换行符。标准库负责使每个输入/
本文向大家介绍C++中带空格字符串的输入问题解决,包括了C++中带空格字符串的输入问题解决的使用技巧和注意事项,需要的朋友参考一下 前言 字符串一直是一个重点加难点,很多笔试面试都会涉及,带空格的字符串更是十分常见,现在对字符串的输入问题进行一下总结。 C++用cin输入的时候会忽略空格以后的字符,比如 C++用cin输入的时候会忽略空格以后的字符,输入"hello world"输出的是"hell
通过前面的学习我们知道, C++ 程序中一般用 ostream 类的 cout 输出流对象和 << 输出运算符实现输出,并且 cout 输出流在内存中有相应的缓冲区。但有时用户还有特殊的输出需求,例如只输出一个字符,这种情况下可以借助该类提供的 put() 成员方法实现。 put() 方法专用于向输出流缓冲区中添加单个字符,其语法格式如下: ostream&put(char c); 其中,参数 c
老师们好: C 语言实现, 给定一个字符串长度不是16字节倍数时,请将字符串左边用0填充,使其长度为16字节的整倍数。 期望得到下面给出的结果
本文向大家介绍C语言使用scanf连续输入字符串出现的问题,包括了C语言使用scanf连续输入字符串出现的问题的使用技巧和注意事项,需要的朋友参考一下 一段看上去很简单的代码,即使是C语言初学者也能看懂。 可是在运行的时候却出现了问题: ①输入a后按下回车 ②用空格隔开之后再按下回车 相信和我一样的大部分初学者,看着自己天衣无缝的代码,百思不得其解。 让我们先来看看,在百度百科中,对于scanf函
字符集(Character Set)为每个字符分配了唯一的编号,我们不妨将它称为编码值。在C语言中,一个字符除了可以用它的实体(也就是真正的字符)表示,还可以用编码值表示。这种使用编码值来间接地表示字符的方式称为 转义字符(Escape Character)。 转义字符以 或者 开头,以 开头表示后跟八进制形式的编码值,以 开头表示后跟十六进制形式的编码值。 对于转义字符来说,只能使用八进制或者十