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