我在学习过程中,发现使用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; }