m0_67517268 2022-04-12 09:01 采纳率: 100%
浏览 42
已结题

请教一个while循环问题

问题遇到的现象和发生背景

循环语句位置变化,所得的结果不同了 ;下面的程序是求输入一个浮点数,输出其小数的位数。

问题相关代码,请勿粘贴截图

程序1:
#include
#include
using namespace std;
int main()
{
char ch;
bool flag = false;
int num = 0;
while ((ch = getchar()) != '\n')
{

    if (flag)
    if (ch >= '0'&&ch <= '9')
         num++;
       else
       {
         num = 0;
         break;
       }
    if (ch=='.')flag = true;
}
if (num > 0)
    cout << num << endl;
else
    cout << "输入不正确!" << endl;
return 0;

}

程序2:
#include
#include
using namespace std;
int main()
{
char ch;
bool flag = false;
int num = 0;
while ((ch = getchar()) != '\n')
{
if (ch == '.')flag = true;
if (flag)
if (ch >= '0'&&ch <= '9')
num++;
else
{
num = 0;
break;
}
}
if (num > 0)
cout << num << endl;
else
cout << "输入不正确!" << endl;
return 0;
}

运行结果及报错内容

程序1:
输入:1.6
输出:1
程序2:
输入:1.6
输出:输入不正确!

我的解答思路和尝试过的方法

这2个程序别的都是一样的,只是while循环里的语句 if (ch == '.')flag = true; 位置不一样。

我想要达到的结果

我认为2个程序结果应该是一样的

  • 写回答

4条回答 默认 最新

  • CSDN专家-link 2022-04-12 09:11
    关注

    你自己思考一下:
    if (ch == '.')flag = true;
    if (flag)
    if (ch >= '0'&&ch <= '9')
    num++;
    else
    {
    num = 0;
    break;
    }
    ======
    这个代码能成立不?只有ch为点符号的时候flag才是true,然后就判断ch是否为数字,这本身就矛盾啊。ch已经是点符号了,怎么会同时又是数字呢?当不是数字时,你就break了。当然不正确
    =========
    而第一段代码的区别,其实是flag为true,和判断if逻辑分别在两次循环中,也就是判断的是两个字符。当前一个字符是点符号时,才会判断下一个字符是不是数字。这就能正确判断输入的是否为浮点数

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

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 4月12日