实例
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文章
4317浏览量
62488 -
代码
+关注
关注
30文章
4762浏览量
68409
发布评论请先 登录
相关推荐
评论