循环语句位置变化,所得的结果不同了 ;下面的程序是求输入一个浮点数,输出其小数的位数。
程序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个程序结果应该是一样的
你自己思考一下:
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逻辑分别在两次循环中,也就是判断的是两个字符。当前一个字符是点符号时,才会判断下一个字符是不是数字。这就能正确判断输入的是否为浮点数
程序是顺序执行的, if (ch == '.')flag = true;放在前面就是先判断是否遇到.了,然后再判断if(flag)。
正常的逻辑应该是:
不对哦,第二个程序,当你输入“.”的时候,flag满足条件,变成true,可以进入下一个if,if (ch >= '0'&&ch <= '9')不满足条件,进入else,执行num = 0;break; 退出循环,打印输入不正确。 所以你再怎么输入,都会在你输入“.”的时候退出循环。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!