时语-shine 2021-11-17 15:32 采纳率: 61.5%
浏览 400
已结题

关于while循环的输入终止条件情况

引入问题:统计数字个数

接收输入的一行字符,统计出字符串中包含数字的个数。
输入格式:
输入一行任意的字符串,可以包含包含数字、字母和特殊字符,也可以不包括
输出格式:
输出输入字符串中数字的个数

输入样例1:
在这里给出一组输入。例如:
hello

输出样例1:
在这里给出相应的输出。例如:
0

现给出2种方法:
1.

#include <stdio.h>
#include <stdlib.h>

 int main(){
   char s[100];
   int i=0,b=0;
   gets(s);
   while (s[i]!='\0'){                //注意
        i++;
    if (s[i]>=48 && s[i]<=57){
   b++;
   }
   }
   printf("%d",b);
   return 0;

}
2.

#include <stdio.h>
int main()
{
    char c;
    int digit=0;
    while ((c=getchar())!=EOF)                 //注意
    {
        if (c >= '0' && c <= '9'){
            digit++;
        }
}
    printf("%d",digit);
    return 0;
}

为什么两种方法里while的循环终止条件不同,且不能互换,s[i]的'\0'要是换成了EOF显示答案错误,getchar()的EOF要是换成了'\0'显示运行超时
由此引起了对while循环终止条件的思考,在一些要连续输入直到满足特定条件才跳出循环。
问下都有哪些符号或者常量等经常被用作连续输入循环判断语句里的终止条件?
'\n'可以用作终止符吗?(潜意识里总是会先打个'\n'试试)最好有具体例子

  • 写回答

2条回答 默认 最新

  • 关注

    \0不等于EOF,\0的ascii码值是0,EOF是文件结束符
    gets(s)从键盘读取一串字符串,并以\0结束,这是函数的功能。
    c=getchar()从键盘读取单个字符,\0无法通过键盘输入,但是EOF可以通过ctrl+z组合键来模拟输入。
    所以两者不能互换。
    另外,你代码一中,第9行的i++应该放在if语句下面。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 创建了问题 11月17日

悬赏问题

  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图