| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 861 人关注过本帖
标题:请教一个问题,为什么不能退出
取消只看楼主 加入收藏
黄昏の腕轮
Rank: 2
等 级:论坛游民
帖 子:64
专家分:12
注 册:2009-6-13
结帖率:100%
收藏
 问题点数:0 回复次数:5 
请教一个问题,为什么不能退出
程序如下:
#include "stdio.h"
#define MAX 1000
void copy(char t[],char s[]);
int getline(char s[],int max);
main()
{
    int len=0;
    int max=0;
    char s[MAX];
    char t[MAX];
   
    while((len=getline(s,MAX))>0)
           if(len>max){
                 max=len;
                 copy(t,s);
           }
    if(max>0)
       printf("%s",t);
    return 0;
   
}

int getline(char s[],int max)
{
    int c,i;
   
    for(i=0;i<MAX-1&&(c=getchar())!=EOF&&c!='\n';i++)
        s[i]=c;
        if(c=='\n'){
        s[i]=c;
        i++;}
        /*i++;*/
        s[i]='\0';
        return i;
}
void copy(char t[],char s[])
{
    int i=0;
    while((t[i]=s[i])!='\0')
    i++;
}
如果我把红色部分注释掉,蓝色的地方去掉注释,就不能退出程序了。。照理说,我输入完毕回车后,就接着执行下面的i++..等然后返回i。。但为什么注释掉“回车”那段之后,就不行了?for循环条件中有c!='\n'啊。
高手们请回答一下。。
唉,发现学C,怎么都入不了门一样。。。咋这么难呢。。。
搜索更多相关主题的帖子: color 
2009-10-01 15:30
黄昏の腕轮
Rank: 2
等 级:论坛游民
帖 子:64
专家分:12
注 册:2009-6-13
收藏
得分:0 
以下是引用沈默在2009-10-1 17:13:42的发言:

#include "stdio.h"
#define MAX 1000
void copy(char t[],char s[]);
int getline(char s[],int max);
main()
{
    int len=0;
    int max=0;
    char s[MAX];
    char t[MAX];
     
    while((len ...
不是很明白。。
正确程序是这样的:
int getline(char s[],int max)
{
    int c,i;
   
    for(i=0;i<MAX-1&&(c=getchar())!=EOF&&c!='\n';i++)
        s[i]=c;
        if(c=='\n'){
        s[i]=c;
        i++;}
        s[i]='\0';
        return i;
}
但我做的时候,没有红色部分,但i++还是有:
int getline(char s[],int max)
{
    int c,i;
   
    for(i=0;i<MAX-1&&(c=getchar())!=EOF&&c!='\n';i++)
        s[i]=c;
        i++;
        s[i]='\0';
        return i;
}
但这个时候循环好像就不能结束了。。
不知道为什么必须要有红色部分。。
2009-10-01 17:42
黄昏の腕轮
Rank: 2
等 级:论坛游民
帖 子:64
专家分:12
注 册:2009-6-13
收藏
得分:0 
没人告诉我
2009-10-02 23:13
黄昏の腕轮
Rank: 2
等 级:论坛游民
帖 子:64
专家分:12
注 册:2009-6-13
收藏
得分:0 
以下是引用放弃那个阿姨在2009-10-2 23:19:40的发言:

学c是这样的,
你能写出这样的程序很不错了,
只是细节没有做好,
下回细心点就行了。
加油~
谢谢你的鼓励。。
不过我是想问。。我为什么错了。。。=。 =
2009-10-03 12:31
黄昏の腕轮
Rank: 2
等 级:论坛游民
帖 子:64
专家分:12
注 册:2009-6-13
收藏
得分:0 
以下是引用UserYuH在2009-10-3 13:43:46的发言:

按Ctrl+Z才能结束循环。
·
if(c=='\n')
{
  s=c;
  i++;
}
红色这段只是保留换行符(不想保留也可以去掉)。
如什么字符都不输入,只按回车,getline函数还是会反回1的长度,s数组只存'\n'和'\0'两个值。
while( ...
关键就是按了Ctrl+Z也不能结束循环。。。
必须加上这么一句,按Ctrl+Z才能结束。。我就是没搞懂这儿。。还是说我的编译器有问题。。只有我这样?
if(c=='\n')
{
  s[i]=c;
  i++;
}

另外,如果我去掉红色部分,不加i++这句。我回车的时候,回车不满足for循环条件了,会跳出循环吧,i并没有+1,这时候下面:s[i]='\0';这句不是会把会车前的字符替换成'\0'吗?


[ 本帖最后由 黄昏の腕轮 于 2009-10-3 16:09 编辑 ]
2009-10-03 16:03
黄昏の腕轮
Rank: 2
等 级:论坛游民
帖 子:64
专家分:12
注 册:2009-6-13
收藏
得分:0 
以下是引用UserYuH在2009-10-3 16:37:02的发言:

int getline(char s[],int max)
{
    int c,i;
     
    for(i=0;i<MAX-1&&(c=getchar())!=EOF&&c!='\n';i++)
        s=c;
        i++; /* 只按一回车时或Ctrl+Z时,for没执行到,数组长度为0,但这却加1,反 ...
终于明白了。。大哥,谢谢了。。。为啥我就想不到呢。。
2009-10-03 17:31
快速回复:请教一个问题,为什么不能退出
数据加载中...
 
   



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

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