2011-05-09 50 views
1

你好我正在教自己C和通过K & R书,我有一些麻烦(我正在运行OS X)。这是来自第1.5.1节“文件复制”,它应该把一个字符作为输入,然后输出该字符。这里是代码:使用getchar()和putchar()的非常简单的C问题

#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 

然后当我运行输出文件(终端),它有一个狭小的空间,然后当我输入了一封信,说我键入

然后我打回来

我又换了一条新线。如果我然后点击一个新的键,屏幕开始疯狂与遍地的问号。

我不确定自己是否合理,但我发现这是一个奇怪的问题。非常感谢您提前

回答

5

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

另外,在main的末尾,您需要使用行return 0;或类似的命令以摆脱“控制到达非空函数的结束”警告。

+0

或者,你可以原型主要为void:'void main(void)' – Mel 2011-05-09 02:07:29

+0

@Mel:与C标准相反。 'main'应该总是返回一个'int'。 – jwodder 2011-05-09 02:08:24

+0

是的,真的,你得到一个编译器*警告*,但有效的程序。当启动C时,应该意识到有很多方法可以搞砸。 :) – Mel 2011-05-09 02:15:58

1

您在第二个getchar后缺少括号。

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

2

你错过了()的第12行的getchar无括号“的getchar”计算的功能,这是地址,为什么你得到的指针铸造到INT警告