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

关于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日

悬赏问题

  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥15 抖音看过的视频,缓存在哪个文件