C语言学习记录4

时间:2022-10-05 22:02:09

#每日落日分享#

C语言学习记录4

今天浅显的学习了'getchar',现在记录下来。

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

结果如下:

C语言学习记录4

很显然,跳过了确认密码,并没有达成我想要的目的。

开始寻找问题所在,通过询问,我了解到键盘输入“123456”然后回车会在输入缓冲区形成“123456\n”,经过第一次读取,输入缓冲区只剩下‘\n’,显然‘getchar’获取了‘\n’。

#include<stdio.h>
int main()
{
char x = '\n';
printf("%d\n", x);
return 0;
}

通过编译可知结果为“10”,对照ASCII码值可知为非Y,所以就会打印“放弃确认”。

要想解决这个问题就要把缓冲区的字符全都提取干净,如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int ch = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
getchar();
printf("请确认密码(Y/N)");
ch = getchar();

if (ch == 'Y')
printf("确认成功");
else
printf("放弃确认");
return 0;
}

结果如下:

C语言学习记录4

但此时还有一个问题:

C语言学习记录4

可以看到,一旦加了空格就回到*。原因还是因为缓冲区没有清理干净。

#include<stdio.h>
int main()
{
int ch = 0;
ch = getchar();
putchar(ch);

return 0;
}

在这里我键盘输入了多个字符,但最终显示的永远为最前面的一个字符,所以

’getchar‘是一个一个的获取字符的。(推测的,本人完全是小白

想要确保把缓冲区清理干净的话可以弄个循环:

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


现在就欧了!

C语言学习记录4