scanf() getchar()和gets()等函数之间的区别

输入缓冲区  键盘缓冲区

这三个函数都是从输入缓冲区中读取输入的数据的。

如果缓冲区有残留数据时,读的就是残留数据而不从键盘缓冲区读取。

scanf和getchar:

字符:

int main()  
{  
       char ch1, ch2;  
       scanf("%c", &ch1);   
       scanf("%c", &ch2);  
       printf("%d  %d\n", ch1, ch2);  
       return 0;  
}  
int main()  
{  
       char ch1, ch2;  
       ch1 = getchar();  
       ch2 = getchar();  
       printf("%d  %d\n", ch1, ch2);  
       return 0;  
}  





本意是:从键盘读入两个字符,然后打印出这两个字符的ASCII码值。
输入a 空格

发现程序自动打出了 97 10.


输入缓冲区现在有a和回车

第一个scanf从输入缓冲区取走a 遇到回车读取结束 

第二个scanf取走了回车。


getchar同样道理。


getchar先读取a遇到回车结束

第二个getchar读取回车,结束。


于是显示的就是a的ASCII码97和\10。


getchar吃回车!!!!!!

读取字符,没有舍弃回车。



再来看看读取字符串:gets(),getchar(),scanf(%s,)


int main()  
{  
       char str1[20], str2[20];  
       scanf("%s",str1);   
       printf("%s\n",str1);      
       scanf("%s",str2);    
       printf("%s\n",str2);    
       return 0;  
}  
输入
Hello[Enter] 
Hello[输出]
world[Enter]
world[输出]


说明scanf读取字符串,遇到回车结束,舍弃了回车。

hello 回车一块进入输入缓存区,没有读取回车。


再看:

输入一次Hello world

就显示了Hello

               world


Hello world 在缓冲区里面

第一个scanf读取hello  遇到空格停止读取,舍弃空格。

第二个scanf读取world。遇到回车结束,舍弃回车。





int main()  
{  
       char str1[20], str2[20];  
       gets(str1);   
       printf("%s\n",str1);      
       gets(str2);    
       printf("%s\n",str2);    
       return 0;  
}  


发现可以读取字符串 且接受了空格符。也就是输入什么读什么!!!!

把回车自动转换成字符串的结束\0字符。这样就顺利读入字符串。





如果对scanf读入字符

a和空格

输入缓冲区的数据是a 空格 回车

scanf读取a遇到空格结束

第二个scanf读取空格遇到空格结束 

    int main()  
{  
       char ch1, ch2,ch3;  
       scanf("%c", &ch1);   
       scanf("%c", &ch2);  
       scanf("%c",&ch3);
       printf("%d  %d   %d\n", ch1, ch2,ch3);  
       return 0;  
}  


小结:

scanf  getchar读取字符

会读取空格 回车等。

且scanf以空格 回车等结束从缓冲区读取,不会舍弃最后的回车符。

getchar以回车结束,不会舍弃回车符。



读取字符串,

scanf读取字符串,遇到空格结束读取,Hello world!

因为scanf%s只认字符串


gers可以读取空格 和回车 并且自动转换\0,字符串结束符。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值