您的位置:首页 > 其它

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

2017-12-24 19:58 190 查看
输入缓冲区  键盘缓冲区

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

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

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,字符串结束符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: