标题:寻找一个字符串中最长的单词并输出
只看楼主
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
gets()函数不会接受回车。

gets()会接受除回车之外的所有字符。

你的这行代码gets(str1) 如果你只输入一个回车的话,实际上等于什么都没输入。

你的if(str1[0]=='\n'),但是在你的代码中str1根本就不会存在回车这东西,怎么可能会判断为真?

[此贴子已经被作者于2017-2-6 19:00编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-02-06 18:58
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
得分:0 
回复 11楼 renkejun1942
不对啊,我的具体输入过程是这样的在;
先输入一个单词:apple
系统询问:Do you want to continue?Yes 1,No,0
我按1,然后enter,系统跳过gets,直接
询问:Do you want tontinue?Yes 1,No,0(这里说明enter应该被gets吸收了啊,所以str1[0]应该等于‘\n',也就应该打出 you are right啊???)
我按0,再enter,我对此非常不理解,请问为什么??

............
2017-02-06 20:02
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 12楼 邹特强
    while(flag=='1')//进入循环,判断,为真则执行,为假则跳过
    {
      gets(str1);//输入一个字符串

      printf("%s",str1);//如果你依旧在这里纠结,在这里加一个printf输出str1,你自己看看str1有没有回车。
                                       //除非你在printf()语句里加上\n,否则这里是不会换行的。你自己试试。

      prin_max(str1,str2);//调用函数
      printf("\nDo you want to continue?Yes,print 1,No,print 0:");
      flag=getchar();//输入一个字符,赋值给flat。但是……这里实际上的输入是两个,一个字符,一个回车,回车留在缓冲中。再次回到判断,留在缓冲中的回车被gets(str1)接收,但是gets()抛弃回车,所以直接进入下一语句,要求输入一个字符。然后…………你的代码就在这里无限的循环。
      printf("\n");
    }
    if(str1[0]=='\n')//你的字符串里面根本没有回车。
    printf("you are right");
    printf("%s",str2);
    return 0;
}

[此贴子已经被作者于2017-2-6 20:47编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-02-06 20:41
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
得分:0 
以楼主的原题为准
问题1:记录最长字符串的长度值,要放在全局变量中。
问题2:输出you are right那句前的if(str1[0]=='\n')有一定的问题,
就算能检测以回车结束的空字符串,通常也是与\r进行比较吧

下面的程序尽管能运行,但是很不符合人机界面习惯,已经在2楼说明,此处未做修改

static  unsigned  int maxlen=0;

static void prin_max(char str1[],char str2[])//将长度更长的单词放入str2中,并存储更长的单词的长度
{
    if(strlen(str1)>maxlen)
    {
      maxlen=strlen(str1);
      strcpy(str2,str1);
    }
}

int main(int argc, char* argv[])
{

     char flag='1';
    char str1[100],str2[100];
    while(flag=='1')
    {
      gets(str1);//一次输入一个单词
      prin_max(str1,str2);
      printf("\nDo you want to continue?Yes,print 1,No,print 0:");
      flag=getchar();//通过询问是否要继续输入,决定输入的单词数量
      printf("\n");
    }
    printf("%s",str2);
    return 0;
}
2017-02-06 21:43
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
得分:0 
回复 13楼 renkejun1942
懂你的意思了,也就是说按我那样输入str1实际上是空数组

............
2017-02-07 15:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-473952-1-1.html




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

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