1.缓存区影响
回车会被读入%c中
(不会读入%d中,因为格式不匹配会自动忽略回车)
2.scanf清除缓存区的方法
(1.getchar
(2.在%c前加空格
3.scanf工作原理是先输入进缓存区,然后从缓存区取出进行使用,当缓存区里无内容时才需要手动输入用于scanf。
再次遇到scanf才会更新数据。
#include <stdio.h>
int main()
{
char w='0';
while(w!='\n')
{ w=getchar();
if(w=='\n')
break;
if(w=='C'||w=='c')
printf("BEIJING OLYMPIC GAMES\n");
else if(w=='J'||w=='j')
printf("JAPAN WORLD CUP\n");
else if(w=='K'||w=='k')
printf("KOREA WORLD CUP\n");
else printf("%c\n",w);
}
return 0;
}
#include <stdio.h>
int main()
{
int x,y;
do {
system("cls");
printf("数");
y=scanf("%d", &x);
if(y==1)
break;
else
scanf("%c", &x);//取走缓存区内容,便于输入
} while(1);
printf("x=%d", x);
return 0;
}
下面这个代码
输入a回车有一个again是因为最后r是回车
输入xx回车其实有三个字符,所以连续这样输,输出不一样(一种字符只输出一次,所以两个x,输出一个again)
输入aa回车,虽然三个字符但最后r是a,跳出循环
#include <stdio.h>
int main()
{char r;
do{
scanf("%c",&r);
scanf("%c",&r);
if(r!='a')
printf("again\n");
}
while(r!='a');
printf("6");
return 0;
}
其他:pow函数返回的是double类型的浮点数