正如问题所说,由于某种原因,我的程序没有以我目前无法识别的方式刷新输入或使用我的变量。这是一个家庭作业项目,我已经超出了我必须为此做的事情,现在我只想让程序真正工作:P
使查找更容易的详细信息:
该程序在第一次运行时完美执行。所有抛出都有效,只有正确的值( n > 0 )被接受并转换为二进制。
一旦我输入终止输入,程序就会进入一个循环,并且只要求再次终止,如下所示:
当我在我的 Linux 笔记本电脑上的 Netbeans 上运行这个程序时,在我输入终止值后程序崩溃了。在 Windows 上的 Visual C++ 上,它像刚才描述的那样进入循环。
在代码中,我尝试在程序重新启动时清除每个流并初始化每个新变量,但无济于事。我只是看不到我的错误。
我相信错误在于主要功能:
int main( void )
{
vector<int> store;
int terminate = 1;
do
{
int num = 0;
string input = "";
if( cin.fail() )
{
cin.clear();
cin.ignore( numeric_limits<streamsize>::max(), '\n' );
}
cout << "Please enter a natural number." << endl;
readLine( input, num );
cout << "\nThank you. Number is being processed..." << endl;
workNum( num, store );
line;
cout << "Go again? 0 to terminate." << endl;
cin >> terminate // No checking yet, just want it to work!
cin.clear();
}while( terminate );
cin.get();
return 0;
}
或在读取数字的函数中:
void readLine( string &input, int &num )
{
int buf = 1;
stringstream ss;
vec_sz size;
if( ss.fail() )
{
ss.clear();
ss.ignore( numeric_limits<streamsize>::max(), '\n' );
}
if( getline( cin, input ) )
{
size = input.size();
for( int loop = 0; loop < size; ++loop )
if( isalpha( input[loop] ) )
throw domain_error( "Invalid Input." );
ss << input;
ss >> buf;
if( buf <= 0 )
throw domain_error( "Invalid Input." );
num = buf;
ss.clear();
}
}