質問が言うように、何らかの理由で、私のプログラムは入力をフラッシュしたり、現時点では識別できない方法で変数を使用したりしていません。これは私がやらなければならなかったことを超えた宿題プロジェクトのためのものです、今私はプログラムが実際に機能することを望んでいます:P
発見を容易にするための詳細:
プログラムは、最初の実行時に問題なく実行されます。すべてのスローが機能し、適切な値(n> 0)のみが受け入れられ、バイナリに変換されます。
終了入力を入力するとすぐに、プログラムはループに入り、次のように再度終了を要求するだけです。
LinuxラップトップのNetbeansでこのプログラムを実行すると、終了値を入力した後にプログラムがクラッシュします。Windows上のVisualC++では、今説明したようにループに入ります。
コードでは、プログラムの再起動時にすべてのストリームをクリアし、すべての変数を新しく初期化しようとしましたが、役に立ちませんでした。私は自分の間違いを見ることができません。
私はエラーが主な機能のいずれかにあると信じています:
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();
}
}