C:printf()和putchar()问题
我正在阅读K&R书,并想以我从未尝试过的方式测试printf()和putchar()函数。 我遇到了一些意想不到的事件,并希望听到更多有经验的程序员为什么发生这种情况。
char c;
while((c = getchar()) != EOF) {
//put char(c);
printf("%d your character was.n", c);
}
谢谢。
在Linux上,您可以使用Ctrl + d发送它
你需要一个int,否则你不能区分EOF和最后一个可能的字符(0xFFFF不等于0x00FF)
如果你想给它一个字符串, putchar
一个字符,而不是一个字符串,它会打印一部分字符串地址
你只能得到一个输出:你输入的字符的ascii值,另一个“输入”是你在终端输入的内容
编辑 - 关于2的更多细节
你需要一个int,因为getchar可以返回一个值为-1(0x00FF)的字符和一个值为-1(0xFFFF)的整数,它们不具有相同的含义:值-1的字符是一个有效的字符例如,它是拉丁-1),而值-1的整数在这种情况下是EOF。
这是一个简单的程序,显示了不同之处:
#include <stdio.h>
int main(int argc, char ** argv) {
{
char c = 0xFF; /* this is a valid char */
if (c == EOF) printf("wrong end of file detectionn");
}
{
int c = 0xFF; /* this is a valid char */
if (c == EOF) printf("wrong end of file detectionn");
}
}
第一个测试成功,因为char为0xFF == -1,而第二个测试因为int的0x00FF!= -1而失败。
我希望这可以让它更清晰。