为什么我的控制台应用程序不等待第 37 行和第 38 行
Why is my console application not waiting for lines 37 and 38?
请帮助解决此问题。当我运行可执行文件时,控制台没有给我时间按照第 37 行中的要求输入字符,并且我无法确定问题所在。仅当我注释掉两个 for 循环时,它才有效。代码如下所示:
#include "../../std_lib_facilities.h"
#include "../../Eigen/Eigen"
#include "../../Eigen/Dense"
#include <Windows.h>
#include <time.h>
using namespace Eigen;
int main()
{
SetConsoleTitle(TEXT("PipeThk_v1.0"));
system("CLS");
system("color F1");
time_t rawtime_start;
struct tm * timeinfo_start;
time(&rawtime_start);
timeinfo_start = localtime(&rawtime_start);
printf(asctime(timeinfo_start));
cout << "nEnter nominal pipe sizes in 'in':n";
vector<double> npss;
for (double nps; cin >> nps;)
npss.push_back(nps);
cout << "n NPSn";
for (const auto& i : npss)
cout << "n " << i;
time_t rawtime_end;
struct tm * timeinfo_end;
time(&rawtime_end);
timeinfo_end = localtime(&rawtime_end);
cout << endl << endl << asctime(timeinfo_end);
cout << "nEnter any character and hit enter to exit:n";
char ans;
cin >> ans;
return 0;
}
您正在使用operator>>
将std::cin
解析为double
变量。
operator>>
遇到无法转换的字符时停止读取输入。该字符(例如按 Enter 或空格键时)将保留在流的缓冲区中,并立即可供第 37 行的operator>>
读取,而无需提示用户输入更多内容。
因此,例如,如果您输入47
并按 Enter 作为最后一个double
值,则值47
被解析为double
变量,而 Enter 键将被 std::cin >> ans
读取为n
字符。
今天的教训是:不要使用operator>>
来处理来自终端std::cin
的交互式输入。使用 std::getline()
一次读取一行文本,然后构造一个 std::istringstream
对象来根据需要分析该行。 将每次出现的std::cin >> ...
替换为std::getline(std::cin)
,以避免解析交互式输入时出现意外意外。
当然,这不是唯一的方法,而是需要最少工作量并导致最少意外行为的方法。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 是我的等待 - 使用std :: mutex通知机制正确
- 我可以在获取我的"std::future"时执行并等待它吗?
- 使用 crontab 运行 C++ 程序,"cin"不会等待我的输入
- 为什么我的服务器没有等待接收来自客户端的回复
- 如何使我的C++程序永远等待传感器事件而不终止
- c ++:TCP服务器"bind"功能失败(errno 98),如果我在两次连续应用程序启动之间没有等待足够的时间
- 为什么我的Winsock应用程序有时等待listen(),有时等待accept()
- 我的pthread会等待还是主线程会等待?
- 我的程序挂在返回与futex_wait_queue_me等待通道
- 为什么我的控制台应用程序不等待第 37 行和第 38 行
- 如何告诉我的程序在等待从用户那里获取命令时执行某些操作
- 性能问题与c++(使用vc++ 2010):在运行时,我的程序似乎随机等待一段时间