c++ - 即使变量为假,“如果”也会执行
问题描述
所以,我知道这个网站上有很多与此相关的问题,但我找不到与我的问题类似的问题。
cout<<"Please enter one or more floating point numbers"<<endl<<"When finished, enter 'q'"<<endl;
while(!done)
{
cin>>Next;
char letter;
double temp;
letter=Next[0];
if (letter=='q')
done=true;
if (!done)
temp = stod(Next);
cout<<"temp is "<<temp<<" Next is "<<Next<<endl;
localdata.push_back(temp);
}
100.0
输入, 10.0
,1.0
和的标准输出q
是这样的 -
Please enter one or more floating point numbers
When finished, enter 'q'
100.0
The value of done is 0
temp is 100 Next is 100.0
10.0
The value of done is 0
temp is 10 Next is 10.0
1.0
The value of done is 0
temp is 1 Next is 1.0
q
The value of done is 1
temp is 1 Next is q
所以,问题在于,当标准输入为 时q
, 的值done
应该更改为true
,但下一个仍然if(!done)
被执行,这是不应该的。
可能是什么问题呢?我知道这一定是相当明显的事情,但我不能指望它!
解决方案
你省略了大括号。在 C++ 中,没有大括号,if
只占用第一行。你应该使用大括号:
if (!done) {
temp = stod(Next);
cout<<"temp is "<<temp<<" Next is "<<Next<<endl;
localdata.push_back(temp);
}
您可以if (letter=='q')
保持原样(使用第一行),但最好在任何地方使用 {}。
推荐阅读
- javascript - 如何从带有 (.rtf) 扩展名的 word 文档中获取文本?
- django - Django_filters 仅在存在 ?page=1 时才具有初始值
- hadoop - 带有排序关键字的 Elasticsearch 查询参数
- excel - 计算单元格和合并单元格的混合
- unity3d - 如何使用 Unity 在 ARCore 中放置两个或多个 3D 资源
- mysql - 如何将日志javascript保存到数据库
- socket.io - 我想知道如何在 socket.io 中创建房间并将它们存储在会话中
- javascript - WebSocket 连接在发送消息时关闭
- r - R:如何在 PowerPoint 中添加注释(官员)
- c# - 在窗口窗体页面切换时捕获事件