时语-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日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来