搜索
查看: 2536|回复: 14
打印 上一主题 下一主题

我表示不明白这样为什么错?【貌似跟书上的一样啊】

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-23 16:07:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
是不是编译器检查的严谨程度不一样啊
[code=Cpp width=740px]#include <stdio.h>
#include <stdlib.h>
int main()
{
        char c;
    while((c=getchar())=='' || c=='\t' || c=='\n')
                ;
        putchar(c);
        
        system("pause");
        return 0;
}
[/code]

最佳答案

查看完整内容

EOF = end of file,文件结束信号 windows下面是输入ctrl+Z 然后回车
沙发
发表于 2013-4-23 16:07:59 | 只看该作者
l769829723 发表于 2013-4-27 14:12
这里的EOF指的是我没有故意输入空格么?求教

EOF = end of file,文件结束信号
windows下面是输入ctrl+Z 然后回车
板凳
发表于 2013-4-23 16:54:29 | 只看该作者
while((c=getchar())=='' || c=='\t' || c=='\n')
这一句有问题。
1、第一个单引号之间无东西。你是想输入空格吧?在检查一下空格是否输入。
2、while语句之后你加了分号吧。虽然不知道你想干什么,但是你加了分号代表该语句直接结束。结果是无论满不满足while语句,putchar语句都会执行。我觉得你不是这个意思吧。
3、我改了你的程序,发现你的程序一发现非空格回车换行的符号,就自动结束。你把你想完成的程序功能发一下,我你到底想要干什么。
地板
 楼主| 发表于 2013-4-24 10:41:53 | 只看该作者
1.在实际中你还可能遇到循环体什么都不做的情况,这时相当于循环体是一个空语句。C语言中设置了一种空语句。你可能还记得;C语句以分号结束,一个语句也可以分号结束。
2.程序要求是跳过所有空白符
C允许:while((c=getchar())='' || c=='\t' || c=='\n');这样写的。
5#
发表于 2013-4-25 08:15:41 | 只看该作者
“貌似”我的理解是“似乎”、“好像”。代码真的跟书上一样吗?编译器一样吗?
你的程序我改了一下,在TCC下运行,达到跳过空白符的要求。
#include <stdio.h>
//#include <stdlib.h>

int main(int argc, char *argv[])
{
        char c;
        c=getchar();
        while (c==' ' || c=='\t' || c=='\n')
                c=getchar();
        putchar(c);
        
        return 0;
}
6#
 楼主| 发表于 2013-4-26 10:14:31 | 只看该作者
Smallbee 发表于 2013-4-25 08:15
“貌似”我的理解是“似乎”、“好像”。代码真的跟书上一样吗?编译器一样吗?
你的程序我改了一下,在TC ...

代码一样,编译器不一样,所以才想是不是编译器的问题!
你修改的那样是完整代码,书上最后有写上去。但是修改成简略写法就又不行了。。。师傅
int main()
{
        char c;
        c=getchar();
        while (c==' ' || c=='\t' || c=='\n')
                                        ;
        putchar(c);
        
        system("pause");
        return 0;
}
并且那一行是可以留空的,书上故意拿这个做例子的。讲解有的时候允许这样写
7#
 楼主| 发表于 2013-4-26 10:17:04 | 只看该作者
Smallbee 发表于 2013-4-25 08:15
“貌似”我的理解是“似乎”、“好像”。代码真的跟书上一样吗?编译器一样吗?
你的程序我改了一下,在TC ...

大虾好厉害,求解释。。。还有刚才那个忘记说我用的是这个论坛的神器:啊哈C编译器,磊哥的。
8#
发表于 2013-4-27 02:02:26 | 只看该作者
其实问题就在于(c=getchar()) == ' ',中间有个空格的……

另外这段没法正确处理EOF

int c;
while((c=getchar()) == ' ' || c == '\t' || c == '\n')
  ;
if(c == EOF)
  puts("reached the end of the stream!\n");
else
  putchar(c);

是一个更好的实现
9#
 楼主| 发表于 2013-4-27 11:02:58 | 只看该作者
rosynirvana 发表于 2013-4-27 02:02
其实问题就在于(c=getchar()) == ' ',中间有个空格的……

另外这段没法正确处理EOF

受教了,但是书上为什么没有用EOF也可以呢
10#
发表于 2013-4-27 12:00:26 | 只看该作者
l769829723 发表于 2013-4-27 11:02
受教了,但是书上为什么没有用EOF也可以呢

因为你试验的时候没去故意输入一个EOF
11#
 楼主| 发表于 2013-4-27 14:12:31 | 只看该作者
rosynirvana 发表于 2013-4-27 12:00
因为你试验的时候没去故意输入一个EOF

这里的EOF指的是我没有故意输入空格么?求教
12#
 楼主| 发表于 2013-4-28 11:47:07 | 只看该作者
好吧,结贴吧
13#
发表于 2013-5-2 08:14:20 | 只看该作者
l769829723 发表于 2013-4-26 10:14
代码一样,编译器不一样,所以才想是不是编译器的问题!
你修改的那样是完整代码,书上最后有写上去。但 ...

这应该是编译器的原因了。具体为什么我也是C小白一个,还望能有高手详解!不过个人认为对于这种在不同编译器中有不同处理(即存在歧义)的语句还是完全展开来写的好。
14#
发表于 2013-5-2 11:19:21 | 只看该作者
Smallbee 发表于 2013-5-2 08:14
这应该是编译器的原因了。具体为什么我也是C小白一个,还望能有高手详解!不过个人认为对于这种在不同编译 ...

没什么编译器问题,单纯是他写错了

(c=getchar()) == ' '
(c=getchar()) == ''

两句放在一起就容易看出来了吧,楼主写的是第二句
15#
发表于 2013-5-3 08:51:51 | 只看该作者
rosynirvana 发表于 2013-5-2 11:19
没什么编译器问题,单纯是他写错了

(c=getchar()) == ' '

果然如此!Thank you
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表