while (gets(input)!=NULL)如何是该循环结束???

时间:2022-02-28 04:20:39

int main (void)
{
   char input[MAX_LEN];
   int len,longest_len=-1;
   char longest[MAX_LEN];
   while (gets(input)!=NULL){
       len=strlen(input);
   if(len>longest_len){
   longest_len=len;
   strcpy(longest,input);
   }  
   }
    if(longest_len>0)
   puts(longest);
return EXIT_SUCCESS;
}

这是C和指针里一个习题的代码,输入几个字符串,然后输出最长的那个,我在测试运行的时候,无法结束字符串的输入,就是无论我输入“回车”还是“空格”啥的,都显示继续输入,无法结束while循环。
我知道,gets()函数如果无法读入一个字符串就会返回NULL指针,但是我们在键盘输入的字符均是字符串,无法是输入失败的。所以这里有疑问,请大家解释(我用了CTRL+C,结果直接退出程序,while后边的代码也 不在执行了,显然是不行的)谢谢大家了……

12 个解决方案

#1


while(gets(input))
{
   ...
}
...


退出按ctrl+z

#2


引用 1 楼 zjwzcnjsy 的回复:
while(gets(input))
{
  ...
}
...


退出按ctrl+z

int main (void)
{
   char input[MAX_LEN];
   int len,longest_len=-1;
   char longest[MAX_LEN];
   while (gets(input)){
       len=strlen(input);
       if(len>longest_len){
           longest_len=len;
           strcpy(longest,input);
       }  
   }
    if(longest_len>0)
           puts(longest);
    return 0;
}

#3


F6或ctrl-z

#4


Ctrl+Z

#5


gets()函数是向stdin文件中读取一行字符,文件的结束标识是EOF,所以你需要输入EOF才能结束该循环。方法是通过ctr + d输入EOF来结束循环(在linux下是输入ctr + d)。

#6


ctrl+z

#7


stdin的EOF?DOS/Windows控制台F6/Ctrl+Z再回车,Linux终端shell之类默认Ctrl+D。

#8


ctrl+z

#9


引用 6 楼 hnuqinhuan 的回复:
ctrl+z
++

#10


while(gets(input)!=NULL&&input[0]!='\0')
.......
不输入字符 直接按ENTER退出

#11


引用 10 楼 biaobiao99 的回复:
while(gets(input)!=NULL&&input[0]!='\0')
.......
不输入字符 直接按ENTER退出

这个方法好,也可以strlen(input)==0这样。

#12


谢谢大家的回复,是CTRL+Z 我把分数给最先回复我的两个人吧 谢谢了……

#1


while(gets(input))
{
   ...
}
...


退出按ctrl+z

#2


引用 1 楼 zjwzcnjsy 的回复:
while(gets(input))
{
  ...
}
...


退出按ctrl+z

int main (void)
{
   char input[MAX_LEN];
   int len,longest_len=-1;
   char longest[MAX_LEN];
   while (gets(input)){
       len=strlen(input);
       if(len>longest_len){
           longest_len=len;
           strcpy(longest,input);
       }  
   }
    if(longest_len>0)
           puts(longest);
    return 0;
}

#3


F6或ctrl-z

#4


Ctrl+Z

#5


gets()函数是向stdin文件中读取一行字符,文件的结束标识是EOF,所以你需要输入EOF才能结束该循环。方法是通过ctr + d输入EOF来结束循环(在linux下是输入ctr + d)。

#6


ctrl+z

#7


stdin的EOF?DOS/Windows控制台F6/Ctrl+Z再回车,Linux终端shell之类默认Ctrl+D。

#8


ctrl+z

#9


引用 6 楼 hnuqinhuan 的回复:
ctrl+z
++

#10


while(gets(input)!=NULL&&input[0]!='\0')
.......
不输入字符 直接按ENTER退出

#11


引用 10 楼 biaobiao99 的回复:
while(gets(input)!=NULL&&input[0]!='\0')
.......
不输入字符 直接按ENTER退出

这个方法好,也可以strlen(input)==0这样。

#12


谢谢大家的回复,是CTRL+Z 我把分数给最先回复我的两个人吧 谢谢了……