此问题需要帮助。当我运行可执行文件时,控制台没有给我时间按照第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 NPS\n";
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;
}
答案 0 :(得分:3)
您正在使用operator>>
将std::cin
解析为double
变量。
operator>>
在遇到无法转换的字符时停止读取输入。该字符,例如当按下 Enter 或 Space 时,将保留在流的缓冲区中,并立即可由operator>>
在线读取37,无需提示用户提供更多输入。
因此,例如,如果您输入47
并按输入作为最后一个double
值,则值47
会被解析为{{1}变量, Enter 键被double
读取为\n
个字符。
今天的教训是:不要使用std::cin >> ans
来处理来自终端的operator>>
的交互式输入。使用std::cin
一次读取一行文本,然后根据需要构造一个std::getline()
对象来解析该行。将std::istringstream
的每次出现替换为std::cin >> ...
,以避免在解析交互式输入时出现意外的意外。
当然,这不是唯一的方法,而是需要最少量工作的方法,并且会产生最少量的意外行为。