c语言中,scanf函数和getchar函数的区别是什么?求解!!!

 我来答
匿名用户
推荐于2016-05-01
展开全部
getchar()
getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,如果stdin有数据的话不用输入它就可以直接读取了。
for(int i=0;i<10;++i)
{
char ch=getchar();
printf ( "ch=%c\n", ch );
}
当输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取,并显示到屏幕上。
如果我想让getchar()每次都能够等待用户输入的话就要清空缓冲区, C标准规定 fflush()函数是用来刷新输出(stdout)缓存的。对于输入(stdin),它是没有定义的。但是有些编译器也定义了 fflush( stdin )的实现,比如微软的VC。其它编译器是否也定义了 fflush( stdin )的实现应当查找它的手册。GCC编译器没有定义它的实现,所以不能使用 fflush( stdin )来刷新输入缓存。对于没有定义 fflush( stdin )的编译器,可以使用 fgets()函数来代替它(比用 getchar()、scanf()等函数通用性好)。可以这样忽略输入流中留下的回车等其它输入,从而使下一次的输入总保持一个“干净”的状态。(这个是任何平台下都可以的)
for(int i=0;i<10;++i)
{

char ch=getchar();
fflush(stdin); //每次都会有等待状态了(VC平台)
printf ( "ch=%c\n", ch );
} scanf()
scanf这个库函数比较奇怪,而且存在一定的缺陷,所以很多人都不用了。
scanf输入字符串,整型,实型等数据判断的方式都一样,回车,空格,tab键都认为是一个数据的结束,当然字符的话,一个字符就是结束了,回车,空格等都有对应的ascii码,所以用scanf输入字符时要小心这些东东被当成字符输进去,而输入字符串和整型,实型等数据时这些都被当成分隔符而不会被输入到字符数组或变量里。
蔡俭声锦
2019-09-27 · TA获得超过3.5万个赞
知道大有可为答主
回答量:1.3万
采纳率:25%
帮助的人:918万
展开全部
getchar()
getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,如果stdin有数据的话不用输入它就可以直接读取了。
for(int
i=0;i<10;++i)
{
char
ch=getchar();
printf
(
"ch=%c\n",
ch
);
}
当输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取,并显示到屏幕上。
如果我想让getchar()每次都能够等待用户输入的话就要清空缓冲区,
C标准规定
fflush()函数是用来刷新输出(stdout)缓存的。对于输入(stdin),它是没有定义的。但是有些编译器也定义了
fflush(
stdin
)的实现,比如微软的VC。其它编译器是否也定义了
fflush(
stdin
)的实现应当查找它的手册。GCC编译器没有定义它的实现,所以不能使用
fflush(
stdin
)来刷新输入缓存。对于没有定义
fflush(
stdin
)的编译器,可以使用
fgets()函数来代替它(比用
getchar()、scanf()等函数通用性好)。可以这样忽略输入流中留下的回车等其它输入,从而使下一次的输入总保持一个“干净”的状态。(这个是任何平台下都可以的)
for(int
i=0;i<10;++i)
{
char
ch=getchar();
fflush(stdin);
//每次都会有等待状态了(VC平台)
printf
(
"ch=%c\n",
ch
);
}

scanf()
scanf这个库函数比较奇怪,而且存在一定的缺陷,所以很多人都不用了。
scanf输入字符串,整型,实型等数据判断的方式都一样,回车,空格,tab键都认为是一个数据的结束,当然字符的话,一个字符就是结束了,回车,空格等都有对应的ascii码,所以用scanf输入字符时要小心这些东东被当成字符输进去,而输入字符串和整型,实型等数据时这些都被当成分隔符而不会被输入到字符数组或变量里。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-10
展开全部
scanf()函数用来格式化输入,可以接受多种数据类型,getchar()函数只能读入字符类型的数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
妫聪寒思烟
2020-04-03 · TA获得超过3984个赞
知道大有可为答主
回答量:3119
采纳率:31%
帮助的人:215万
展开全部
getchar()
getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,如果stdin有数据的话不用输入它就可以直接读取了。
for(int
i=0;i<10;++i)
{
char
ch=getchar();
printf
(
"ch=%c\n",
ch
);
}
当输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取,并显示到屏幕上。
如果我想让getchar()每次都能够等待用户输入的话就要清空缓冲区,
C标准规定
fflush()函数是用来刷新输出(stdout)缓存的。对于输入(stdin),它是没有定义的。但是有些编译器也定义了
fflush(
stdin
)的实现,比如微软的VC。其它编译器是否也定义了
fflush(
stdin
)的实现应当查找它的手册。GCC编译器没有定义它的实现,所以不能使用
fflush(
stdin
)来刷新输入缓存。对于没有定义
fflush(
stdin
)的编译器,可以使用
fgets()函数来代替它(比用
getchar()、scanf()等函数通用性好)。可以这样忽略输入流中留下的回车等其它输入,从而使下一次的输入总保持一个“干净”的状态。(这个是任何平台下都可以的)
for(int
i=0;i<10;++i)
{
char
ch=getchar();
fflush(stdin);
//每次都会有等待状态了(VC平台)
printf
(
"ch=%c\n",
ch
);
}
scanf()
scanf这个库函数比较奇怪,而且存在一定的缺陷,所以很多人都不用了。
scanf输入字符串,整型,实型等数据判断的方式都一样,回车,空格,tab键都认为是一个数据的结束,当然字符的话,一个字符就是结束了,回车,空格等都有对应的ascii码,所以用scanf输入字符时要小心这些东东被当成字符输进去,而输入字符串和整型,实型等数据时这些都被当成分隔符而不会被输入到字符数组或变量里。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-10
展开全部
scanf什么都能输入,getchar只能输入一个字符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式