c++ - 了解为什么会出现不需要的 cout 语句迭代
问题描述
我正在使用一些 C++ 代码。我设置了一个 while 循环,允许我运行一些代码 x 次。一旦用户表明他们不想再次运行代码,while 循环就会终止。
#include <iostream>
#include <string>
using namespace std;
char request;
int main() {
while (request != 'N')
{
string getCode = "";
while (getCode.length() != 3)
{
cout << "Please enter your container's region code (A or B followed by two-number identification)" << endl;
getline(cin, getCode);
if (getCode.length() != 3)
{
cout << "Error" << endl;
}
}
//clear the screen
system("cls");
//get letter
if (getCode.at(0) == 'A' || getCode.at(0) == 'B')
{
if ((getCode.at(1) >= '0' && getCode.at(1) <= '9') && (getCode.at(2) >= '0' && getCode.at(2) <= '9'))
{
if (getCode.at(0) == 'A')
{
cout << "The shipping charge is $25" << endl;
}
else if (getCode.at(0) == 'B')
{
cout << "The shipping charge is $30" << endl;
}
}
else
{
cout << "Error" << endl;
}
}
else
{
cout << "Error...Please enter the code as A or B followed by two numbers" << endl;
}
//Again?
cout << "Would you like to enter in another shipping identification number?" << endl;
cin >> request;
}
cout << "Thank you" << endl;
//End Program
system("pause");
return 0;
}
当我表示是时(在“您想输入另一个运输标识号问题”中输入“Y”)我想再次运行代码时,程序输出不需要的“请输入您的集装箱的区域代码(A或 B 后跟两个数字标识”和“错误”语句。另外请注意,代码在“int main()”内,并且我已经正确格式化了“包含”语句。
解决方案
您的问题是要了解为什么会发生这种情况,所以这里是解释。你写的代码是这样说的:
string getCode = "";
while (getCode.length() != 3)
{
cout << "Please enter your container's region code...
如您所见,getCode
始终初始化为空字符串。紧接着,如果它的长度不是3,就输出这个问题。
您需要了解您的计算机将始终按照您的指示执行操作。你的计算机不会做你想让它做的事情,而只会做你告诉它做的事情。以上就是你告诉你的电脑去做的事情,你的电脑每次运行这段代码时,都会乖乖地听从它严格的指令。差不多就是这样的解释,没有什么要理解的了。
这部分代码在另一个循环中,您表示不希望提示出现在循环的第二次和后续迭代中,只出现在第一次迭代中。
但是,上面对您的计算机的说明中没有任何内容指定这一点。你没有告诉你的电脑这是它应该做的,那么你为什么期望你的电脑完全靠自己来做呢?每次您的计算机执行上面显示的这些语句时,都会发生这种情况。不多也不少。无论是第一次在外while
循环内,还是在随后的每次while
循环迭代,都无关紧要。代码总是做同样的事情:getCode
被创建并设置为一个空字符串,并且因为它的长度不是 3,内部while
循环运行,打印提示并调用std::getline
从std::cin
. 在你的最后while
循环,如果您对计算机的指令表明它应该while
从头开始再次运行循环中的代码(因为这就是while
循环所做的),那么上面的指令就会被执行。
如果您现在了解您的计算机为什么这样做(因为这是您告诉它的),那么您应该很容易弄清楚要告诉您的计算机什么,这样它就不会这样做。如果您希望您的计算机仅在第一次执行while
循环时打印提示,那么这正是您需要告诉您的计算机的内容:在while
循环之前设置一个标志,只有在设置了标志时才打印提示(所有其他现有逻辑保持不变),然后清除此标志,因此下次while
循环运行时,您的计算机将完全按照您的指示执行操作,而不是打印提示。
推荐阅读
- excel - 带有 Adodb 查询的下拉列表
- git - 可以将稀疏结帐模式添加到 .gitmodules 中吗?
- python - 在 Python 程序中读入并执行多行 SQL 文本文件
- python - 使用 Python 3 查找文件之间不同的字节位置
- google-mlkit - ML Kit 文本识别/自动旋转
- python - 使用 Keras 训练深度学习检查点
- c - 不能将 pNext 设置为 NULL
- python - 为什么我会得到 IndexError: string index out of range?
- excel - Excel计算文本值中包含数字1的列数
- python - Python exe 文件由于 ModuleNotFoundError: Numpy 而失败。这很令人困惑,因为 numpy 已经安装并且程序在 Pycharm 中运行