Canyou tell me how ths C program run

软件和网站开发以及相关技术探讨
回复
LaoLiulaoliu
帖子: 131
注册时间: 2006-10-25 17:50
来自: 南京
联系:

Canyou tell me how ths C program run

#1

帖子 LaoLiulaoliu » 2006-12-01 16:23

#include<stdio.h>
main()
{
int c;
while(c=getchar()!=EOF)
printf("%d\n",c);
printf("%d - at EOF\n",c);
}
I know the result ,but I don't know how it run.Please tell me .ok?
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
联系:

#2

帖子 dbzhang800 » 2006-12-01 18:59

不编译你就想运行它??
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#3

帖子 BigSnake.NET » 2006-12-01 20:44

gcc *.c
./a.out
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
xphenix
帖子: 35
注册时间: 2006-05-04 15:52

#4

帖子 xphenix » 2007-01-13 21:20

晕倒,很明显LZ说的是How it run, 而不是How to run it... 楼上两位确实可以,专家分还真是不少!


关键在于 c = getchar() != EOF; 其实是 c = ( getchar() != EOF), 无论输入字符,在你没有按下ctrl + D前, 循环一直进行, c的值一直为真(1)...
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
联系:

#5

帖子 dbzhang800 » 2007-01-13 21:33

只要楼主不补充,这个帖子几乎不能理解 :P
newrain
帖子: 28
注册时间: 2007-01-16 23:26

#6

帖子 newrain » 2007-01-27 0:51

EOF是文件结束标志,在这儿作为输入结束标志,EOF的值为-1,而输入的字符是不可能为负数的,所以要进行构造,构造成一个输入字符的ASCII码值为负数的正数(位数不一样的)。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#7

帖子 BigSnake.NET » 2007-01-28 22:09

newrain 写了:EOF是文件结束标志,在这儿作为输入结束标志,EOF的值为-1,而输入的字符是不可能为负数的,所以要进行构造,构造成一个输入字符的ASCII码值为负数的正数(位数不一样的)。
EOF是NULL=0吧。。
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#8

帖子 BigSnake.NET » 2007-01-28 22:10

xphenix 写了:晕倒,很明显LZ说的是How it run, 而不是How to run it... 楼上两位确实可以,专家分还真是不少!


关键在于 c = getchar() != EOF; 其实是 c = ( getchar() != EOF), 无论输入字符,在你没有按下ctrl + D前, 循环一直进行, c的值一直为真(1)...
英语不好。。。。。看错了
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
efan
帖子: 238
注册时间: 2006-09-14 21:59
来自: 广东
联系:

#9

帖子 efan » 2007-01-31 19:54

BigSnake.NET 写了:
newrain 写了:EOF是文件结束标志,在这儿作为输入结束标志,EOF的值为-1,而输入的字符是不可能为负数的,所以要进行构造,构造成一个输入字符的ASCII码值为负数的正数(位数不一样的)。
EOF是NULL=0吧。。
很明显是-1。。。
传说中的一凡……
头像
woodfish1988
帖子: 7
注册时间: 2007-01-31 23:20

#10

帖子 woodfish1988 » 2007-02-01 22:06

efan 写了:
BigSnake.NET 写了:
newrain 写了:EOF是文件结束标志,在这儿作为输入结束标志,EOF的值为-1,而输入的字符是不可能为负数的,所以要进行构造,构造成一个输入字符的ASCII码值为负数的正数(位数不一样的)。
EOF是NULL=0吧。。
很明显是-1。。。
正解,ASCII码里面有0了,如果EOF是0,那么正常的字符不就当做了结束符号了?众所周知,ASCII占1个字节,最高位总位0,即位非负数,因此可以用-1作为EOF
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#11

帖子 BigSnake.NET » 2007-02-01 22:29

woodfish1988 写了:
efan 写了:
BigSnake.NET 写了:
newrain 写了:EOF是文件结束标志,在这儿作为输入结束标志,EOF的值为-1,而输入的字符是不可能为负数的,所以要进行构造,构造成一个输入字符的ASCII码值为负数的正数(位数不一样的)。
EOF是NULL=0吧。。
很明显是-1。。。
正解,ASCII码里面有0了,如果EOF是0,那么正常的字符不就当做了结束符号了?众所周知,ASCII占1个字节,最高位总位0,即位非负数,因此可以用-1作为EOF

代码: 全选

# 2 "a.c" 2
main()
{
int c;
while(c=getchar()!=(-1))
printf("%d\n",c);
printf("%d - at EOF\n",c);
}
看了一下预处理后的代码,原来真的是 -1
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
回复