##C语言学习之-字符的输入

我在学习过程中,发现使用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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值