您好我正在教自己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
然后当我运行输出文件(在终端中)它有一个小空间,然后当我输入一个字母时,说我输入
一
然后我点击了返回
我得到一个新的一行。如果我然后点击一个新密钥,屏幕开始变得疯狂,到处都是问号。
我不确定我是否有多大意义,但我发现这是一个奇怪的问题。非常感谢您提前
答案 0 :(得分:5)
第二项任务应为c = getchar();
。通过省略括号,您将getchar
函数的地址分配给c
,这非常不符合您的要求。
此外,在main
结束时,您需要行return 0;
或类似内容才能摆脱“控制到达非空函数的结束”警告。
答案 1 :(得分:2)
你错过了第12行的getchar上的()。没有括号,“getchar”计算到函数的地址,这就是你得到指针 - cast-to-int警告的原因
答案 2 :(得分:1)
你在第二个getchar
之后缺少括号。
这意味着您将方法的内存中的位置分配给变量c
,这会导致无限循环,因为它永远不会等于EOF
。