以下三个函数中:
getc、getchar 和 scanf,
哪个函数最适合从标准输入流中读取一个字符?为什么?
这些函数是否存在已知的缺陷或限制,使其中一个函数比其他函数更好?
注:本回答保留原始的HTML标签格式。
如果你只想从标准输入中读取单个字符,那么getchar()
是合适的选择。如果你有更复杂的要求,getchar()
就不够用了。
getc()
允许你从不同的流(比如使用 fopen()
打开的流)中读取;scanf()
允许你一次读取多个字符。使用 getchar()
最常见的错误是尝试使用 char
变量来存储结果。你需要使用一个 int
变量,因为 getchar()
返回值的范围是 "在无符号字符范围内的值,加上单个负值 EOF
"。一个 char
变量的范围不足以容纳这个范围,这可能会导致将有效的字符返回与 EOF
混淆。对于 getc()
也是同样的情况。
所有这些函数都以某种方式从控制台或文件中读取一个字符。它们之间的区别相当小,下面是描述:
getc()从指定的文件返回一个字符。从使用角度来看,它等同于相同的fgetc()调用,而且fgetc()更常见。只有两个函数的实现不同。
fgetc()从指定的文件返回一个字符。从使用角度来看,它等同于相同的getc()调用,除了fgetc()更常见外。只有两个函数的实现不同。
是的,我作弊了,最后一段我使用了剪切和粘贴。
getchar()从stdin返回一个字符。实际上,它与调用getc(stdin)相同。