解决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语言输入单个字符屏蔽回车符的问题的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » C语言