(谢大侠解答)这个作业偶知道为啥错了。

C、C++和Java语言
回复
头像
hyxuzhimin
帖子: 249
注册时间: 2008-05-09 14:14
送出感谢: 0
接收感谢: 0

(谢大侠解答)这个作业偶知道为啥错了。

#1

帖子 hyxuzhimin » 2008-12-05 22:29

大名鼎鼎的The C Programming Language 2nd Edition里的作业题1-6
Verify that the expression getchar() != EOF is 0 or 1.
这是答案:可以运行得到结果。

代码: 全选

/* This program prompts for input, and then captures a character

 * from the keyboard. If EOF is signalled (typically through a

 * control-D or control-Z character, though not necessarily),

 * the program prints 0. Otherwise, it prints 1.

 *

 * If your input stream is buffered (and it probably is), then

 * you will need to press the ENTER key before the program will

 * respond.

 */

 

#include <stdio.h>

 

int main(void)

{

  printf("Press a key. ENTER would be nice :-)\n\n");

  printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF);

  return 0;

}

 

偶写的是

代码: 全选

#include <stdio.h>
int main()
{
	int c;
	c=getchar()!=EOF;
	putchar(c);
   
}
后来瞎改改,还是不行。

代码: 全选

#include <stdio.h>
int main()
{
	int c;
	c=(getchar()!=EOF)?1:0;
	putchar(c);
   
}
按照书上讲,c=(getchar()!=EOF这一段是先判断输入的字符是否不等于文件结束符,不等于为真,等于为假,即1和0. 然后再赋值给c。
但是最后却不能显示0或者是1.而所给的答案可以。不知道为啥原理?( ctrl + D为文件结束符。 )
上次由 hyxuzhimin 在 2008-12-06 11:20,总共编辑 1 次。
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星
送出感谢: 1 次
接收感谢: 0

Re: (向大侠求助)这个作业偶为啥错了?

#2

帖子 xhy » 2008-12-05 23:07

0和1是可打印字符吗?
目前负债150多万
头像
hyxuzhimin
帖子: 249
注册时间: 2008-05-09 14:14
送出感谢: 0
接收感谢: 0

Re: (向大侠求助)这个作业偶为啥错了?

#3

帖子 hyxuzhimin » 2008-12-05 23:13

大侠,printf函数是不是也属于打印的啊?我也不清楚~~~
printf和putchar除了多字符、单字符区别以外,还有有啥区别呢?是不是因为这个区别才无法运行偶的程序?不懂~~ :em06
xeoc
帖子: 1994
注册时间: 2007-05-06 10:12
送出感谢: 0
接收感谢: 0

Re: (向大侠求助)这个作业偶为啥错了?

#4

帖子 xeoc » 2008-12-05 23:21

代码: 全选

#include <stdio.h>
main()
{
   int c;
   c=getchar()!=EOF;
   printf("%d\n",c);
}
xeoc
帖子: 1994
注册时间: 2007-05-06 10:12
送出感谢: 0
接收感谢: 0

Re: (向大侠求助)这个作业偶为啥错了?

#5

帖子 xeoc » 2008-12-05 23:30

代码: 全选

#include <stdio.h>
int main()
{
   int c;
   c=(getchar()!=EOF?'1':'0';)
   putchar(c);
   
}
你的第二个这样试试?
头像
hyxuzhimin
帖子: 249
注册时间: 2008-05-09 14:14
送出感谢: 0
接收感谢: 0

Re: (向大侠求助)这个作业偶为啥错了?

#6

帖子 hyxuzhimin » 2008-12-05 23:41

回 楼上大侠,你给的两个都可以用了。不知道为啥道理呢? :em11
xeoc
帖子: 1994
注册时间: 2007-05-06 10:12
送出感谢: 0
接收感谢: 0

Re: (向大侠求助)这个作业偶为啥错了?

#7

帖子 xeoc » 2008-12-06 0:06

hyxuzhimin 写了:回 楼上大侠,你给的两个都可以用了。不知道为啥道理呢? :em11
putchar可以打印字符'1',不能打印数值1
头像
hyxuzhimin
帖子: 249
注册时间: 2008-05-09 14:14
送出感谢: 0
接收感谢: 0

Re: (向大侠求助)这个作业偶为啥错了?

#8

帖子 hyxuzhimin » 2008-12-06 10:46

回 X大侠:

代码: 全选

#include <stdio.h>
int main()
{
	int c;
	c=getchar();
	putchar(c);
	return 0;
	}
这段代码可以用。如果我输入1,它就输出1.
里面的c可是整数1哦。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: (向大侠求助)这个作业偶为啥错了?

#9

帖子 BigSnake.NET » 2008-12-06 11:04

hyxuzhimin 写了:回 X大侠:

代码: 全选

#include <stdio.h>
int main()
{
	int c;
	c=getchar();
	putchar(c);
	return 0;
	}
这段代码可以用。如果我输入1,它就输出1.
里面的c可是整数1哦。
c 不是整数 1
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
hyxuzhimin
帖子: 249
注册时间: 2008-05-09 14:14
送出感谢: 0
接收感谢: 0

Re: (向大侠求助)这个作业偶为啥错了?

#10

帖子 hyxuzhimin » 2008-12-06 11:15

哦,知道了,是49...ASCII码。
前面两个错误的代码是因为putchar把1认为是ASCII码输出,所以无解了。 :em03
回复

回到 “C/C++/Java”