使用getchar()和putchar()的非常简单的C问题

时间:2011-05-09 01:54:12

标签: c getchar putchar

您好我正在教自己C并经历K& R书,我遇到了一些麻烦(我正在运行OS X)。这是第1.5.1节“文件复制”,它应该将一个字符作为输入,然后输出该字符。这是代码:

#include <stdio.h>

/* --  Copy input to output -- */ 
int main(void)
{
int c;

c = getchar();

while ( c != EOF ) {
    putchar(c);
    c = getchar;
}


}

所以,我认为我的问题不在于代码本身,而在于编译和运行。首先,编译时我得到以下错误

/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c: In function ‘main’:
/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c:12: warning: assignment makes integer from pointer without a        cast
/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c:16: warning: control reaches end of non-void function

然后当我运行输出文件(在终端中)它有一个小空间,然后当我输入一个字母时,说我输入

然后我点击了返回

我得到一个新的一行。如果我然后点击一个新密钥,屏幕开始变得疯狂,到处都是问号。

我不确定我是否有多大意义,但我发现这是一个奇怪的问题。非常感谢您提前

3 个答案:

答案 0 :(得分:5)

第二项任务应为c = getchar();。通过省略括号,您将getchar函数的地址分配给c,这非常不符合您的要求。

此外,在main结束时,您需要行return 0;或类似内容才能摆脱“控制到达非空函数的结束”警告。

答案 1 :(得分:2)

你错过了第12行的getchar上的()。没有括号,“getchar”计算到函数的地址,这就是你得到指针 - cast-to-int警告的原因

答案 2 :(得分:1)

你在第二个getchar之后缺少括号。

这意味着您将方法的内存中的位置分配给变量c,这会导致无限循环,因为它永远不会等于EOF