首先,相信很多读者读到题目都会产生一个共同的疑问:什么是幽灵换行符???
幽灵换行符是指:在C语言中,当用scanf函数时,想要输入几个字符,比如:
当输入‘a’之后按下回车键,运行自动结束,而不是等待输入第二个字符,第二个字符就像幽灵般消失了,这是为什么呢??
其实,原因很简单,回车键也有对应的字符,即\n,当输入第一个字符‘a’之后按下回车键就相当于将\n通过scanf输入到系统中,顶替了变量b的“位置”,如下图可通过调试+监视验证以上结论:
那么面对这种幽灵换行符问题,有哪些解决方案呢??
下面笔者给出三种可行的解决方案,如有补充欢迎读者留言!
一.
既然\n的值被赋给了b,那不妨再调用一个scanf函数输入变量b,如下代码所示:
#include <stdio.h>
int main()
{
char a, b;
scanf("%c%c", &a,&b);
scanf("%c", &b);//再次输入变量b
printf("x = %d, ch = %d", a, b);
return 0;
}
运行结果如下图:
x,ch读取的是a 和 b 的ASCII值,因为printf打印的是%d。
二.
既然\n的值顶替了b的值,那么我们可以利用scanf函数的特性,利用空格解决幽灵换行符的问题。如下代码:
#include <stdio.h>
int main() {
// 读取输入的字符
char char1, char2;
scanf("%c", &char1);
scanf(" %c", &char2);//%c之前添加一个空格,将\n输入到空格中
printf("x = %d, ch = %d", char1, char2);
return 0;
}
运行结果如下图:
三.
利用getchar()解决幽灵换行符问题。
首先我们先认识一下getchar函数:
通过cplusplus网站查找getchar函数:
(英文版)
(中文版)
简单来说,getchar函数就是取一个字符,getchar和键盘之间有一个输入缓冲区,键盘上敲下的字符会被放到输入缓冲区中,然后getchar从输入缓冲区中“拿”字符,如图:
因此我们可以利用getchar将输入的\n取走
#include <stdio.h>
int main()
{
char x, ch;
// 读取第一个字符
x = getchar();
// 读取并丢弃换行符
getchar();
// 读取第二个字符
ch = getchar();
// 输出结果
printf("x = %d, ch = %d\n", (int)x, (int)ch);
return 0;
}
解释:
getchar()
用于从标准输入读取一个字符。- 第一次调用
getchar()
读取第一个字符(例如 'A')。 - 第二次调用
getchar()
读取并丢弃换行符。 - 第三次调用
getchar()
读取第二个字符(例如 'B')。 - 使用
printf()
输出两个字符的 ASCII 值。
输入输出样例:
或者在二.的基础上使用getchar,代码如下所示:
#include <stdio.h>
int main() {
// 读取输入的字符
char char1, char2;
scanf("%c", &char1);
getchar();
scanf("%c", &char2);//此处不用空格
printf("x = %d, ch = %d", char1, char2);
return 0;
}
运行结果如下图:
也就是说,getchar()作用就相当于空格的作用了。
以上是笔者分享的三个解决幽灵换行符的方案,如有改进和补充,欢迎读者留言讨论。
标签:字符,读取,入门,scanf,C语言,换行符,输入,getchar From: https://blog.csdn.net/hjx1235/article/details/143191589