c语言读书笔记,C语言笔记
#每天分享日落#
我今天用简单的方法学习了 getchar ,现在我把它写下来。
# define _ CRT _ SECURE _ NO _ WARNINGS 1
#包含stdio.h
int main()
{
int ch=0;
char password[20]={ 0 };
Printf(请输入密码:);
scanf(%s ,密码);
Printf(请确认密码(Y/N):);
ch=getchar();
if (ch==Y )
Printf(确认成功);
其他
Printf(“放弃确认”);
返回0;
}结果如下:
显然,跳过确认密码并没有达到我想要的效果。
我开始寻找问题。通过查询得知,键盘输入“123456”然后回车,会在输入缓冲区形成“123456\n”。第一次读取后,输入缓冲区中只剩下 \ n ,显然 getchar 得到了 \ n 。
#包含stdio.h
int main()
{
char x= \ n
printf(%d\n ,x);
返回0;
}通过编译得知结果为“10”,与ASCII码值相比得知为非Y,所以会打印“放弃确认”。
要解决这个问题,需要提取缓冲区中的所有字符,如下所示:
# define _ CRT _ SECURE _ NO _ WARNINGS 1
#包含stdio.h
int main()
{
int ch=0;
char password[20]={ 0 };
Printf(请输入密码:);
scanf(%s ,密码);
getchar();
Printf(请确认密码(Y/N));
ch=getchar();
if (ch==Y )
Printf(确认成功);
其他
Printf(“放弃确认”);
返回0;
}结果如下:
但是在这一点上,还有另一个问题:
如你所见,一旦增加了空间,就回到了解放前。或者因为缓冲区没有被清理。
#包含stdio.h
int main()
{
int ch=0;
ch=getchar();
putchar(ch);
返回0;
}这里,我在键盘上输入了多个字符,但最终显示的总是第一个字符,所以
getchar 是一个一个地获取字符。(想必我是彻底白了)
如果你想清除缓冲区,你可以做一个循环:
# define _ CRT _ SECURE _ NO _ WARNINGS 1
#包含stdio.h
int main()
{
int ch=0;
char password[20]={ 0 };
Printf(请输入密码:);
scanf(%s ,密码);
while (getchar()!=\n )
{
;
}
Printf(请确认密码(Y/N));
ch=getchar();
if (ch==Y )
Printf(确认成功);
其他
Printf(“放弃确认”);
返回0;
}
现在是欧洲了!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。