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



你好,我正在自学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
然后

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

一个

然后我点击返回

我得到一条新线。如果我然后按下一个新键,屏幕就会开始疯狂,到处都是问号。

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

第二个作业应该是c = getchar(); 。 通过省略括号,您将getchar函数的地址分配给c,这完全不是您想要的。

此外,在main结束时,您需要return 0;行或类似行,以摆脱"控制达到非无效功能结束"警告。

你错过了第 12 行 getchar 上的 ()。 没有括号,"getchar"计算为函数的地址,这就是您收到指针投射到INT警告的原因

您在第 2 getchar之后缺少括号。

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

最新更新