getchar相关问题

getchar不是输入一个字符吗?怎么有时候看到可以输一串啊?

getchar就是 输入一个字符,你看到输入一串的是 gets 吧,或者 使用循环来调用 getchar函数的吧

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7613590
  • 这篇博客也不错, 你可以看下关于getchar()吸收回车字符的那点事儿
  • 除此之外, 这篇博客: 【getchar】在C语言中getchar的使用方法和读取规则中的 三、getchar的读取规则 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    讲了这么多可能很多人都不明白这么一个代码有什么用呢?其实在很多地方都会用到,比如模拟用户登入场景。但是写这个代码的时候就要注意getchar的读取规则
    代码如下(示例)

    #include<stdio.h>
    int main()
    {
    	char password[20] = { 0 };
    	printf("请输入密码:>");
    	scanf("%s", password);
    	printf("请确认密码(Y/N):>");
    	int ch = getchar();
    	if (ch == 'Y')
    	{
    		printf("确认成功");
    	}
    	else
    	{
    		printf("确认失败");
    	}
    	return 0;
    }
    

    代码运行结果
    在这里插入图片描述
    在这里我们看到都还没确认就直接输出确认失败,到这里大家应该都明白了是什么问题吧?没错就是\n的问题,这里getchar发现缓冲区里面还有一个\n就没等我们输入直接把\n读走
    那应该如何解决呢?
    代码如下(示例)

    #include<stdio.h>
    int main()
    {
    	char password[20] = { 0 };
    	printf("请输入密码:>");
    	scanf("%s", password);
    	getchar();
    	printf("请确认密码(Y/N):>");
    	int ch = getchar();
    	if (ch == 'Y')
    	{
    		printf("确认成功");
    	}
    	else
    	{
    		printf("确认失败");
    	}
    	return 0;
    }
    

    代码运行结果
    在这里插入图片描述
    接下来我们再想大家思考一个问题,当密码里面有空格的时候还会确认成功吗?
    在这里插入图片描述
    没错还是会失败,这又是为什么呢?因为数组把空格前面的123456读走了,但是缓冲区里还剩下空格abcdef\n所以getchar还是会读取缓冲区里面的东西
    那该怎么解决呢?
    代码如下(示例)

    int main()
    {
    	char password[20] = { 0 };
    	printf("请输入密码:>");
    	scanf("%s", password);
    	int temp = 0;
    	while((temp=getchar())!='\n');
    	{
    		;
    	}
    	printf("请确认密码(Y/N):>");
    	int ch = getchar();
    	if (ch == 'Y')
    	{
    		printf("确认成功");
    	}
    	else
    	{
    		printf("确认失败");
    	}
    	return 0;
    }
    

    代码运行结果
    在这里插入图片描述



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^