当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : (谢大侠解答)这个作业偶知道为啥错了。
帖子发表于 : 2008-12-05 22:29 
头像

注册: 2008-05-09 14:14
帖子: 249
送出感谢: 0 次
接收感谢: 0 次
大名鼎鼎的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 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: (向大侠求助)这个作业偶为啥错了?
帖子发表于 : 2008-12-05 23:07 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
0和1是可打印字符吗?


_________________
目前负债150多万


页首
 用户资料  
 
3 楼 
 文章标题 : Re: (向大侠求助)这个作业偶为啥错了?
帖子发表于 : 2008-12-05 23:13 
头像

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


页首
 用户资料  
 
4 楼 
 文章标题 : Re: (向大侠求助)这个作业偶为啥错了?
帖子发表于 : 2008-12-05 23:21 

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


页首
 用户资料  
 
5 楼 
 文章标题 : Re: (向大侠求助)这个作业偶为啥错了?
帖子发表于 : 2008-12-05 23:30 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
代码:
#include <stdio.h>
int main()
{
   int c;
   c=(getchar()!=EOF?'1':'0';)
   putchar(c);
   
}


你的第二个这样试试?


页首
 用户资料  
 
6 楼 
 文章标题 : Re: (向大侠求助)这个作业偶为啥错了?
帖子发表于 : 2008-12-05 23:41 
头像

注册: 2008-05-09 14:14
帖子: 249
送出感谢: 0 次
接收感谢: 0 次
回 楼上大侠,你给的两个都可以用了。不知道为啥道理呢? :em11


页首
 用户资料  
 
7 楼 
 文章标题 : Re: (向大侠求助)这个作业偶为啥错了?
帖子发表于 : 2008-12-06 0:06 

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


putchar可以打印字符'1',不能打印数值1


页首
 用户资料  
 
8 楼 
 文章标题 : Re: (向大侠求助)这个作业偶为啥错了?
帖子发表于 : 2008-12-06 10:46 
头像

注册: 2008-05-09 14:14
帖子: 249
送出感谢: 0 次
接收感谢: 0 次
回 X大侠:
代码:
#include <stdio.h>
int main()
{
   int c;
   c=getchar();
   putchar(c);
   return 0;
   }

这段代码可以用。如果我输入1,它就输出1.
里面的c可是整数1哦。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: (向大侠求助)这个作业偶为啥错了?
帖子发表于 : 2008-12-06 11:04 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
hyxuzhimin 写道:
回 X大侠:
代码:
#include <stdio.h>
int main()
{
   int c;
   c=getchar();
   putchar(c);
   return 0;
   }

这段代码可以用。如果我输入1,它就输出1.
里面的c可是整数1哦。


c 不是整数 1


_________________
^_^ ~~~
要理解递归,首先要理解递归。

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


页首
 用户资料  
 
10 楼 
 文章标题 : Re: (向大侠求助)这个作业偶为啥错了?
帖子发表于 : 2008-12-06 11:15 
头像

注册: 2008-05-09 14:14
帖子: 249
送出感谢: 0 次
接收感谢: 0 次
哦,知道了,是49...ASCII码。
前面两个错误的代码是因为putchar把1认为是ASCII码输出,所以无解了。 :em03


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译