我在学习过程中,发现使用scanf()函数读入字符过程中老是出错;
原因是,scanf()函数在读入字符时是会略过空格、换行、制表等字符;
而且c编译器大多都是缓冲输入,当前面输入不正确时,后面的输入会首先使用之前的缓冲内容,因此会
一直错下去。
而getchar()函数会读入一切字符,因此使用getchar()函数读入字符更好。
附上错误的代码:
#include<stdio.h>
int is_letter(char );
int main(){
char ch;
while((scanf("%c",&ch))!=EOF){
int position = is_letter(ch);
if(position!=-1)
printf("your inout %c is a letter,in the letter it position is:%d\n",ch,position);
else
printf("your input is not a letter\n");
}
}
int is_letter(char ch){
if('A'<=ch<='Z')//而且这里的判断条件是错误的
return (ch-'A')+1;
else if('a'<=ch<='z')
return (ch-'a')+1;
else if(!('A'<=ch<='Z'||'a'<=ch<='z'))
return -1;
}
修改后正确的代码:
#include<stdio.h>
int is_letter(char );
int main(){
char ch;
while((ch = getchar())!=EOF){
int position = is_letter(ch);
if(position!=-1)
printf("your inout %c is a letter,in the letter it position is:%d\n",ch,position);
else
printf("your input is not a letter\n");
}
}
int is_letter(char ch){
if('A'<=ch&&ch<='Z')
return (ch-'A')+1;
else if('a'<=ch&&ch<='z')
return (ch-'a')+1;
else
return -1;
}