实例
1.清空缓冲区
下面一段把代码是输入一段密码,并且还要用getchar()接受是否确认密码的选项:
int main()
{
char password[20] = { 0 };
int ch = 0;
printf("输入密码\\n");
scanf("%s", password);
printf("请确认密码(Y/N):");
ch = getchar();
if (ch == 'Y')
{
printf("成功\\n");
}
else
{
printf("失败\\n");
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
我们输入一端密码后,还未输入Y或N,代码就自动打印“失败”并退出运行
这其实还是scamf无法读取回车在作祟
当我们输入1234567后,此时在输入缓冲区中其实存的是:1234567\\n
scanf("%s", password);语句读取字符串,因为它无法读取\\n所以此时scanf只会读取走1234567,在输入缓冲区中还有\\n
所以在之后的ch = getchar();中,就会读取\\n,不等于Y,所以会打印失败
所以,要把缓冲中的 \\n 消化掉,也就是清空缓冲区
只要,再写一个getchar()语句,将\\n读取走,就可以了
代码如下:
int main()
{
char password[20] = { 0 };
int ch = 0;
printf("输入密码\\n");
scanf("%s", password);
printf("请确认密码(Y/N):");
getchar(); //清空缓冲区
ch = getchar();
if (ch == 'Y')
{
printf("成功\\n");
}
else
{
printf("失败\\n");
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
运行成功

2.字符串中有空格
以下代码是输入一个字符串再输出:
int main()
{
char str[20] = { 0 };
scanf("%s", str);
printf("%s", str);
return 0;
}
1
2
3
4
5
6
7
如果输入的字符串是连续的,也就是没有空格的,此代码正常运行
如果输入的字符串是有字符的,就会出现错误

错误的原因还是scanf无法读取缓冲区中的空格,所以接下来要使用getchar去读取字符串
因为输入的一段字符串一定会是以\\n为结尾
所以在前面的while ((ch = getchar()) != 'EOF)改成while ((ch = getchar()) != '\\n')即可,只要不遇到\\n就一直读取下去
代码如下:
int main()
{
char str[20] = { 0 };
char ch = 0;
while ((ch = getchar()) != '\\n')
{
putchar(ch);
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
运行结果:

原文链接:https://blog.csdn.net/weixin_64116522/article/details/127956631
-
函数
+关注
关注
3文章
4408浏览量
66959 -
代码
+关注
关注
30文章
4947浏览量
73281
发布评论请先 登录
STM32CubeIde生成的工程,使用printf函数没有调用_write和__io_putchar函数,为什么?
重定向了fputc及putchar函数,但printf没有输出,为什么?
是否可以在调试模式下使用''printf''或''putchar''函数
浅谈keil中库函数和寄存器关系
51单片机(STC15W408AS)映射printf函数 串口收发实现
如何使用printf函数将字符串打印到串口

putchar()函数详解
评论