一.getchar()是什么:
getchar() : 输入单个字符
gets() : 输入多个字符
注意:
1.getchar()返回值的类型为int(实质上是字符的ASCII码值)
2.若读取失败或读取结束返回EOF(实质是-1)
3.参数为void,即getchar(void)
二.原理
来看个例子:
eg.输入字符,判断是否是字母,每次输入三个
输入1:abc
输出1:a yes
输入2:b
输出2:b yes
输出3:c
输出3:c yes
代码如下:
#include <stdio.h>
int main(){
char ch;
while((ch=getchar())!=EOF){
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='B'){
printf("%c yes\n",ch);
}else {
printf("%c no\n",ch);
}
}
return 0;
}
输出如下:
a
a yesno
b
b yesno
c
c yesno
这是为什么呢?
这就是getchar()的原理之处,输入函数(scanf(),getchar())在读取我们的数据时与键盘之间有一个缓冲区.
样例中a,b,c在输入时我们都默认输入了一个“\n”,所以在程序的缓冲区来看,我们给它输入的实际上是"a\n",所以这个“\n”就是样例中"no"的来源。
那么正确的长什么样呢?
#include <stdio.h>
int main(){
char ch;
while((ch=getchar())!=EOF){
getchar();//清空缓存即可
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='B'){
printf("%c yes\n",ch);
}else {
printf("%c no\n",ch);
}
}
return 0;
}
三.来道例题:
写出这个数:
时间限制 400 ms
内存限制 65536 kB
代码长度限制 8000 B
作者 CHEN, Yue
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1空格,但一行中最后一个拼音数字后没有空格。
输入样例: 1234567890987654321123456789
输出样例: yi san wu
*附代码:
#include <stdio.h>
#include <string.h>
char m[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main(){
//printf("a%da",(int)m[2][4]);
//if((int)m[2][4]==0)printf(" sdfsdfsdf");
char a;
int num=0,sum=0;
while((a=getchar())!='\n'){
num=a;
num-=48;
sum+=num;
}
int s=sum;
int cnt=0;
while(sum>0){
sum/=10;
cnt++;//统计位数
}
int n=1;
for(int i=1;i<cnt;i++){
n*=10;
}
int tmp=0;//每一位的数字
for(int i=0;i<cnt;i++){
tmp=s/n;
s%=n;
n/=10;
int i=0;
if(n==0){
while((int)m[tmp][i]!=0){
printf("%c",m[tmp][i]);
i++;
}
}else{
while((int)m[tmp][i]!=0){
printf("%c",m[tmp][i]);
i++;
}
printf(" ");
}
}
return 0;
}