-
2022-01-23 17:39:14
在C语言中,在输入过程中,用回车键换行时,因为回车键也是字符,所以可能会被后面的scanf吸收,即将回车赋值给后面的字符型变量。
#include<stdio.h> int main () { int a; char c; scanf("%d",&a); scanf("%c",&c); printf("%d\n",a); printf("%c\n",c); return 0; }
以上代码中如果第一个scanf输入完后,用回车来结束对变量a的输入,按下回车后程序会直接结束赋值,开始输出结果,此时的变量c中存放的就是回车符。
解决办法
1:第一个scanf函数后加 fflush(stdin);可以用来清除回车键
2:第一个scanf后加 getchar();来吸收回车键
3:第一个scanf改为scanf("%d\n",&a);
4:第二个scanf改为scanf("\n%c",&c);
更多相关内容 -
关于C语言接受字符的小问题------吸收回车符
2020-02-27 21:41:52 -
getchar();吸收回车符
2022-02-25 10:10:41在进行如下代码时: #include int main() { int data; char cdata; printf("请输入一个整数:\n"); scanf("%d",&data); switch(data){ case 1: puts... // 吸收回车符 scanf("%c",&cdata); 其运行结果如下图所示:在进行如下代码时:
#include <stdio.h> int main() { int data; char cdata; printf("请输入一个整数:\n"); scanf("%d",&data); switch(data){ case 1: puts("满足条件1的情况"); break; case 2: puts("满足条件2的情况"); break; case 3: puts("满足条件3的情况"); break; default: puts("其他情况"); } printf("请输入一个字符:\n"); scanf("%c",&cdata); switch(cdata){ case 'a': puts("满足条件a的情况"); break; case 'b': puts("满足条件b的情况"); break; case 'c': puts("满足条件c的情况"); break; default: puts("其他情况"); } return 0; }
其运行结果如下图所示:
未输入第二次,却显示了其运行结果。
分析其原因,是因为第一次scanf("%d",&data);输入后,回车没有被吸收,被放入到scanf("%c",&cdata);中。故需要将回车符吸收,即可进行第二次输入。代码进行如下修改:
printf("请输入一个字符:\n"); getchar(); // 吸收回车符 scanf("%c",&cdata);
其运行结果如下图所示:
-
C语言中输入单个字符会屏蔽回车符如何解决
2021-05-19 04:29:26C语言中输入单个字符会屏蔽回车符如何解决发布时间:2020-12-10 13:47:13来源:亿速云阅读:109作者:Leah本篇文章为大家展示了C语言中输入单个字符会屏蔽回车符如何解决,内容简明扼要并且容易理解,绝对能使你眼前...C语言中输入单个字符会屏蔽回车符如何解决
发布时间:2020-12-10 13:47:13
来源:亿速云
阅读:109
作者:Leah
本篇文章为大家展示了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语言中输入单个字符会屏蔽回车符如何解决,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
-
C语言中getchar()、gets()和scanf()的特点以及scanf产生的多余回车符问题
2021-05-21 06:34:31我遇到的这个问题实在是C语言新手比较容易遇到的一个问题。是关于get()和getchar()这两个函数的。大家都知道,gets()函数作用是输入字符串,而getchar()是输入单个字符。但在一个小程序中,我发现了它们两个一些别的... -
c语言scanf()停止接受输入及scanf("%c",&c)吃掉回车或者空格字符的问题
2021-05-22 03:15:05scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。① 遇空格、“回车”、“跳格”键。② 遇宽度结束。③ 遇非法输入。问题二... -
解决C语言输入单个字符屏蔽回车符的问题
2021-05-19 08:15:22C语言的scanf()函数在接收输入单个字符时会把上一次输入的回车符号当做这次输入的字符,造成无法正确的输入字符数据。这恐怕是初学C的童鞋门遇到的最头疼的问题了。今天给大家提供四种解决方法供借鉴。1、在scanf()... -
C语言回车键被scanf或getchar()函数吸收怎么办
2022-04-14 20:14:28在C语言中,在输入过程中,用回车键换行时,因为回车键也是字符,所以可能会被后面的scanf吸收,即将回车赋值给后面的字符型变量。 #include<stdio.h> int main () { int a; char c; scanf("%d",&a... -
课节:输入输出问题 getchar()吸收回车符 putchar(getchar());输出从键盘输入的字符。
2022-01-23 12:43:14getchar是从键盘输入 ...//在控制台上本身就要回车,回车就是要按一下,即就是回车符。 puts("你输入的小写字符是"); printf("%c",A+32); printf("测试"); getchar();//getchar抵消来自9行的换... -
关于getchar()吸收回车字符
2020-11-24 16:17:10今天遇到了getchar()吸收回车字符,下面的链接里讲了如何处理这种事情,正式今天遇到问题的解答。 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown... -
关于getchar()吸收回车字符的那点事儿
2020-11-20 23:10:58关于getchar()吸收回车字符的那点事儿 避开废话请点击 结论↓↓↓关于getchar()吸收回车字符的那点事儿结论 在写到zzulioj1132题时,发现了一个问题。 如下代码 #include<stdio.h> #include<string.h> ... -
c语言scanf()停止接受输入及scanf("%c",&c)吃掉回车或者空格字符的问题
2021-05-22 03:15:02scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。① 遇空格、“回车”、“跳格”键。② 遇宽度结束。③ 遇非法输入。问题二... -
C语言统计一篇英文短文中单词的个数实例代码
2020-12-25 20:47:59具体代码如下所述: #include #define N 1000 void main(){ char en[N][81]; int i,j,num=0,n,state; //num 用来统计单词的个数 //state 用来记录程序当前是否处于一个单词之中,初值为0,... //吸收回车符 for -
C++ gets() 前使用cin输入导致多录入一个回车符的解决办法
2021-03-10 09:52:06C++ gets() 前使用cin输入导致多录入一个回车符的解决办法 做字符串反转和判断回文算法题的时候都遇到了这个问题,和舍友讨论并逐个测试以后总结出了一些解决方法。 问题描述如下: 题目要求在输入字符串前先输入一... -
C语言什么时候应该加getchar()吃掉回车
2021-05-22 12:44:22如果你想用getchar()去接住上次输入的回车符以便给下面的运算带来准确性的话,就是在输入整型或者浮点型之后再加一个getchar(),至于要不要在每一行都加就要看什么情况了。我可以给你举两个个简单的例子... -
C语言fgets按行读取文件,末尾的换行符问题
2020-02-28 19:30:45之前的博客提到了怎样对长度不确定且无法估计的文本文件进行按行读取的问题,这次我发现了一个每一行的末尾换行符处理的问题以及fgets的一个特性,这都是我之前没有注意到的地方。 文章目录1.每行末尾换行符的处理... -
C语言输入输出的回车问题
2021-11-13 20:40:59最后我把[^\n]换成%s不知为何还输出了#0#0#,之后的字符串也无法输出,感觉回车的这个换行符影响到了,但又scanf除了%c都不会吸收回车符,下一个scanf在输入前碰到回车,会自动把回车抛弃,最后一张图,自己试了一下... -
c语言中scanf("%c",&c)吃掉回车或者空格字符的问题
2012-10-17 18:45:53问题来源... #include void main(){ int a; char b; printf("input a integer\n");... //这里需要吸收 回车符 下面有种方法,第二种我没看懂 -
getchar消除回车符号
2021-09-22 19:57:42当程序中使用了scanf和getchar,通过键盘输入 “字符串” 后按...//吸收回车符 或 char name[32]; scanf("%s", name); getchar();//吸收回车符 尤其是在程序中同时使用到了 getchar 和 scanf 时,需要格外注意。 ... -
【C 】注意:gets()和getline()吃回车的情况
2021-05-21 09:34:20(以回车结束时无法输入字符串,以空格结束时字符串前多了一个空格)原因是cin是从输入缓冲区读入数据的,读取成功后分隔符回车和空格还留在输入缓冲区,后续使用gets()或getline()输入时会读取到它们。我们在写代码... -
嵌入式学习DAY5 -- C语言(输入输出占位符,循环,以及重点讲解一维数组)
2021-02-27 15:20:04%o —>打印八进制数据 %x —>打印十六进制数据(打印出的十六进制是小写字母) %X —>会以大写的方式打印十六进制 %#o----> 打印时自动在八进制前面添加前导符0 —》(意味着#是一个前导符) %#x / %#X %d —>int %hd ... -
C语言——printf&scanf格式字符串【占位符】
2021-05-19 02:46:56当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b】 % 宽度,如果时小数包含小数点 【比如你的scanf语句吸收格式字段是%4f,但是你输入了3.1415926那么,它只会吸收3.14, 作为浮点类型。后面的15926以整型的方式存在... -
c语言中scanf的基本用法
2021-05-19 05:07:39前言scanf()是C语言的格式输入...它接收的是变量的地址//所以一般情况下除了指针型变量和数组名要给变量加上取地址符&下面主要介绍了C语言中scanf的用法和注意事项,下面来一起看看详细的介绍吧scanf概念scan... -
C++中关于 getline() 读取缓冲区中回车,以及cin 结束符的问题
2020-08-28 23:44:45C++中关于 getline() 读取缓冲区中回车,以及cin 结束符的问题 解决方法 在 getlint() 前加 cin.ignore() -
scanf()函数能不能接收回车
2021-01-27 18:59:28对于末位回车符,会把其保存在输入缓冲区,保存在输入缓冲区中的末位回车符能否为下次scanf()所接收。要视scanf()中输入类型决定。仅字符型变量scanf("%c",&a)可以接收回车。 实验对比结果如下: 1.scanf()... -
c语言的scanf在按下“Enter”键后到底发生了什么事情??
2015-09-04 16:33:06上面的解释是输入71.82后按下回车,回车被c1当作字符吸收了,c2吸收了'A';但是上面输入完b=7后,不是按下了回车键吗,最终输入了71.82按下回车后,键盘缓存中不是存留着两个回车吗?为什么c2不是吸收到回车?? ... -
scanf(“%s,)与gets()输入字符串的区别,以及与getchar()吸收回车键的搭配
2022-01-19 15:25:46scanf,gets,getchar的区别 三者都是从标准输入流stdio (标准输入...常用来吸收回车符。 4.scanf()用%c,%s空格键,Tab键,回车键结束一次输入,不会舍弃最后的回车符或空格或Tab(即还在缓冲区中),可使用getcha. -
c语言输入函数
2021-05-31 21:08:12c语言输入函数 1.scanf int scanf(const char *format, ...); // ...表示多变量输入 例如: int a; scanf("%d",&...//变量前要加上&...它以空格、制表符、回车符为读取的结束符。 例如: int a; int b; scanf