int ch = 0;
ch = getchar();
putchar(ch);
-
getchar( ) 表示从键盘接受一个字符放进ch中,注意的是,getchar( )输入字符时需要回车,并且该字符会在屏幕上显示。
-
getch() 表示从键盘上接受一个字符,但是不需要按回车就可以读入,该字符不会在屏幕上显示出来。
-
scanf() 只读取空格之前的东西
-
putchar( ) 表示输出ch
-
**gets()**详见关于gets和scanf的详细描述
循环输入的情况
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
EOF 表示 end of file 即为 -1
当键盘按下Ctrl + Z时,停止循环。
好了,前面都是铺垫,下面举一个栗子。
#include <stdio.h>
int main()
{
int ret = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
printf("请确认(y/n):>");
ret = getchar();
if (ret == 'y')
printf("确认成功!");
else
printf("放弃确认!");
return 0;
}
运行结果
请输入密码:>123456
请确认(y/n):>放弃确认!
为什么会这样呢???
.
上面我提到过,getchar( ) 表示从键盘接受一个字符放进ch中。从键盘输入的字符会放在一个输入流区,在scanf()拿了自己想要的东西之后,还剩下什么呢?
.
'\n’不是吗?
在输入完123456之后,我们按下了回车,那么接下来getchar()读取了 ‘\n’ 存放在 ret 中,所以才会出错。
.
那就需要在读取字符放入ret前,我们需要一个getchar()去读取这个换行(哈哈,反正也没有输出~)
#include <stdio.h>
int main()
{
int ret = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
//缓冲区还剩余一个'\n'
//读取下一个'\n'
getchar();
printf("请确认(y/n):>");
ret = getchar();
if (ret == 'y')
printf("确认成功!");
else
printf("放弃确认!");
return 0;
}
这样就好了嘛?
我们再来输入一组字符串~
输出是这样的
请输入密码:>123456 abc
请确认(y/n):>放弃确认!
因为scanf()只能读取空格之前的东西
所以代码又可以优化
#include <stdio.h>
int main()
{
int ret = 0;
int ch = 0;
char password[20] = { 0 };
printf("请输入密码:>");
while ((ch = getchar()) != '\n')
{
ch = getchar();
}
printf("请确认(Y/N):>");
ret = getchar();
if (ret == 'Y')
printf("确认成功!");
else
printf("放弃确认!");
return 0;
}