1.scanf("%c")
scanf等待回车输入后,准确说是'\n'输入后,从缓冲区中读取数据,称为等待回车输入;
这也是我们很多次输入数据要按回车键的原因。
scanf读取数据时,简单来说分为两种
一种是读取字符scanf("%c"),由于tab,空格,和回车都有自己对应的ascaii码,tab为9,空格为32,回车为10,
所以输入数据时要谨防这些间隔符被当成字符输入;
一种是输入字符串,整形,浮点型等数据,这些数据输入时,输入到缓冲区中的tab,空格和回车会被当成分隔符;
这种方式读取数据,最后会在缓冲区留下一个'\n',依然可以用scanf("%c"或getchar读取,而其他的分隔符就真的被当作分隔符过滤掉了;
#include "stdio.h"
int main(void)
{
int n0;
double n1;
char n2[10];
char n3;
scanf("%d",&n0);
scanf("%lf",&n1);
scanf("%s",n2);
scanf("%c",&n3);
printf("*%d*,*%lf*,*%s*,*%d*",n0,n1,n2,n3);
return 0;
}
//输入
1
1.1
hello回车
//结果
缓冲区:1'\n'1.1'\n'hello'\n'
scanf("%d",&n0);//get 1
scanf("%lf",&n1);//'\n'过滤,'get 1.1
scanf("%s",n2); //'\n'过滤,get hello
scanf("%c",&n3); //get'\n'
2.getchar
getchar等待回车输入后,准确说是'\n'输入后,从缓冲区中读取数据,称为等待回车输入;(与scanf相同)
但是getchar每次读取数据都是从缓冲区中读取,而不是从键盘读取,依次输入的数据可以理解为以队列的形式输入到缓冲区,
队头输入,队尾读取;
<pre name="code" class="cpp">#include "stdio.h"
#include "stdlib.h"
int main(void)
{
char c;
for(;(c=getchar())!='a';)
printf("%c",c);
getchar();
c=getchar();
printf("%c",c);
return 0;
}
//输入csdn然后回车
char c;
for(;(c=getchar())!='a';)//输入csdn'\n'
printf("%c",c);//依次从缓冲取获取csdn'\n,输出csdn'\n'并等待程序输入
getchar(); //程序未到此处
c=getchar(); //程序未到此处
printf("%c",c);
结果:
csdn
光标等待输入
//输入csdna然后回车
char c;
for(;(c=getchar())!='a';) //输入csdna'\n'
printf("%c",c);//依次从缓冲取获取csdna,输出 csdn,不输出a,跳出循环
getchar(); //获取'\n'
c=getchar(); //等待输入
printf("%c",c);
system("pause");
return 0;
结果:csdn光标等待c输入