| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 712 人关注过本帖
标题:新手求助,程序输出为什么会这样~?
只看楼主 加入收藏
四眼罗
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-5-19
收藏
 问题点数:0 回复次数:9 
新手求助,程序输出为什么会这样~?
#include <stdio.h>
main()
{int c;
c = getchar();
while(c!=EOF){
putchar(c);
c=getchar();
if(c=EOF)
printf("%d\n",c);
}
}



如果在编译界面输入“nishi”的话,输出结果是“n-1”为什么不是“nishi-1”呢?

如果吧if 语句删除的话,程序运行后,输出和输入很正常,可是却怎么也退不出编译界面了!


无助中,刚看C程序设计语言的书,没看太懂啊~哪位神仙哥哥救命~


这个例子是The C Programming Language(2nd Edition)上的

原程序代码是:
#include <stdio.h>
main()
{int c;
c = getchar();
while(c!=EOF){
putchar(c);
c=getchar();
}
}

这么说本来就是个死循环吗?当c不是空字符的时候返回不了EOF的值?

[[it] 本帖最后由 四眼罗 于 2008-9-30 23:20 编辑 [/it]]
搜索更多相关主题的帖子: 输出 
2008-09-30 16:38
一起补天
Rank: 2
等 级:论坛游民
帖 子:73
专家分:61
注 册:2008-9-19
收藏
得分:0 
#include <stdio.h>
main()
{
  int c;
  c = getchar();
  while(c!=EOF){    //退不出编译界面是由于这个while语句
  putchar(c);
  c=getchar();
 /* if(c=EOF)
   printf("%d\n",c);  */
  }
   getch();
}
2008-09-30 18:14
小小熊宝宝
Rank: 2
来 自:江苏无锡
等 级:论坛游民
威 望:2
帖 子:183
专家分:38
注 册:2008-8-12
收藏
得分:0 
#include <stdio.h>
main()
{int c;
c = getchar();
while(c!=EOF){
putchar(c);
c=getchar();
if(c=EOF)
printf("%d\n",c);
}
}

[[it] 本帖最后由 小小熊宝宝 于 2008-9-30 18:25 编辑 [/it]]

欢迎加入C语言交流群:43287755
2008-09-30 18:20
一起补天
Rank: 2
等 级:论坛游民
帖 子:73
专家分:61
注 册:2008-9-19
收藏
得分:0 
while语句似乎是个死循环,中的putchar()和getchar()不停循环  (EOF是个什么东东?我怎么一点印象都没了?)
而if语句中你输出的是 %d 整型自然出来的就是n-1了
2008-09-30 18:22
子洋虾米
Rank: 1
来 自:哈尔滨市第九中学
等 级:新手上路
帖 子:79
专家分:0
注 册:2008-9-15
收藏
得分:0 
正解
2008-09-30 19:48
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
这样写就可以了。
程序代码:
#include <stdio.h>
int main(void)
{
    int c;
    while(c=getchar())
    {
        putchar(c);
        if(c==EOF)
        {
            printf("%d\n",c);
            break;
        }
    }
    getch();
}


[[it] 本帖最后由 广陵绝唱 于 2008-9-30 21:07 编辑 [/it]]
2008-09-30 21:06
学习无语
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-7-13
收藏
得分:0 
EOF是文件末尾结束标志,希望楼主还是多看书和理解书吧
2008-09-30 21:30
xuqing520
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-8-31
收藏
得分:0 
#include <stdio.h>
main()
{
  int c;
  c=getchar();
  while(c!=EOF)
  {
     putchar(c);   
     c=getchar();
     if(c=EOF)
       printf("%d\n",c);
  }
}

楼主地想法是想输出一个字符串,但是很显然字符串的结尾是‘\0’的格式,当然这里用EOF也没问题,就是while引导地循环是死循环;另外楼主用c=EOF作为判断语句,其实就是把EOF赋值给c了,则第二次循环就不满足了所以该循环只能执行一次,故只能输出一个字符,另外加上一个整形格式地EOF,也即-1.当然我不知道楼主地判断语句是不是c==EOF,如果这样地话,则可以输出字符串,但是不能输出-1.
2008-09-30 22:46
四眼罗
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-5-19
收藏
得分:0 
回复 8# xuqing520 的帖子
判断语句是c==EOF,这样为什么不能输出-1呢了?

读不到EOF了么?是不是因为不是空字符的时候就返回不了EOF的值了呢?

我的本意是想把我输入的字符串显示出来,然后再在最后把EOF的值显示出来,EOF不是结束符么?为什

么输出不了了?
2008-09-30 23:16
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
/*
   楼主发的代码存在2处BUG
   第一 c = getchar(); 不应放在循环前;运行程序后直接输入<Ctrl + Z>或<Ctrl +D>(Linux/Unix) 会直接跳过循环什么都不显示。
   第二 if(c = EOF)    这里不该用赋值
*/


#include <stdio.h>

int main(void)
{
    int c = 0;  // 只要不是等于 EOF 就可

    while(c != EOF)
    {
        c = getchar();
        putchar(c);
        if(c == EOF)
            printf("%d\n",c);
    }

    // 这里最好暂停下 Windows 下
                                system("pause");
    return 0;
}




// END

[[it] 本帖最后由 cosdos 于 2008-10-1 01:36 编辑 [/it]]

—>〉Sun〈<—
2008-10-01 01:30
快速回复:新手求助,程序输出为什么会这样~?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065820 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved