getchar()和scanf("%c")等价吗?putchar()和printf("%c")等价吗?

7

a = getchar()scanf("%c",&a); 等价吗?

putchar(a)printf("%c",a); 等价吗?其中 a 是一个 char 变量。


另请参见https://dev59.com/MHE95IYBdhLWcg3wAo9U。 - Lazer
2个回答

8

一般来说,它们是相同的。

但在一些小细节上它们并不相同。函数getchar的类型被定义为返回int而不是char。这样做是为了让getchar能够返回所有可能的char值以及错误代码。

因此,尽管在大多数编译器中以下代码可以成功编译,但实际上你会丢失一个错误消息。

char c = getchar();

函数scanf允许您直接使用char类型,并将错误代码分离到返回值中。

1
只返回 EOF,而不是错误消息(复数)。但是除此之外,这是正确的。还应该说一下,getchar() 比 scanf() 更有效率,因为库不必解析格式字符串(链接器也不必链接大块的 scanf() 代码)。 - DevSolar

1

在这里它们做同样的事情。然而,如果你知道你只是在处理字符,那么getcharputchar会更有效率,因为printfscanf变体每次都需要解析字符串以确定如何处理您的请求。此外,它们可能被调用在较低级别的库中,这意味着如果它们在其他地方不需要,您就不必链接printf/scanf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接