我正在阅读K& R书,想要以我从未尝试过的方式测试printf()和putchar()函数。我遇到了一些意想不到的事件,并希望听到更有经验的程序员为什么会这样。
char c;
while((c = getchar()) != EOF) {
//put char(c);
printf("%d your character was.\n", c);
}
感谢。
答案 0 :(得分:4)
,您可以使用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 detection\n");
}
{
int c = 0xFF; /* this is a valid char */
if (c == EOF) printf("wrong end of file detection\n");
}
}
第一次测试成功,因为char为0xFF == -1,而第二次测试失败,因为int为0x00FF!= -1。
我希望这会让它更清晰。
答案 1 :(得分:0)