2017-03-07 25 views
0

私は行列の入力を可能にし、行列の逆数とそれに続くベクトルの入力を計算するコードを記述しようとしています。しかし、行列の値が入力されると、一時停止してベクトルエントリを待つコードを得ることができません。それは、デフォルトでゼロを持つメインの残りの部分を実行するだけです。私はベクトルを埋めるためにコンソールが入力を待つように入力や何かをリセットすることは可能ですか?行列とベクトルを読み取る入力を一時停止するC++

#include <iostream> 
#include "MatrixInverse.h" 
#include "ReadMatrixRow.h" 
#include "GlobalMinVar.h" 

using std::cin; 
using std::cout; 
using std::endl; 

int main(){ 


    int i; 
    int const n_size=3; 
    double **SigmaInv, **Sigma,*mu,*MinVarWeight; 

    Sigma = (double **)malloc(n_size * sizeof(double *)); 
    Sigma[0] = (double *)malloc(n_size * n_size * sizeof(double)); 
    for(i = 1; i < n_size; i++) 
    { Sigma[i] = Sigma[0] + i * n_size;} 

    cout<<"Enter the entries of the covariance matrix row by row,"<<endl; 
    cout<<"breaking each row with a non-numeric character:"<<endl; 

    //PAUSES HERE FOR MATRIX INPUT 

    for (i=0;i<n_size;i++) 
    { 
     ReadMatrixRow(cin,Sigma,i); 
    } 

    mu=(double *)malloc(n_size * sizeof(double *)); 

    cout<<"Input the expected return vector values:"<<endl; 

    //WANT A PAUSE HERE FOR FURTHER INPUT THAT IS SEPARATE 

    ReadVector(cin,mu); 

    for (i=0;i<n_size;i++) 
    { 
     cout<<mu[i]<<endl; 
    } 

機能は、ユーザがgetchは(キーの使用を押すまで一時停止する

istream& ReadMatrixRow(istream& in, double **s,int i) 
{ 
    if (in) 
    { 
     int j=0; 
     double x; 
     while (in>>x) 
     { 
      s[i][j]=x; 
      ++j; 
     } 
     in.clear(); 
     in.ignore(1); 
    } 
    return in; 
} 

istream& ReadVector(istream& in, double *s) 
{ 
    if (in) 
    { 
     int i=0; 
     double x; 
     while (in>>x) 
     { 
      s[i]=x; 
      ++i; 
     } 
     in.clear(); 

    } 
    return in; 
} 

答えて

-1

です)。 getchを使用するにはconio.hヘッダファイルをインクルードする必要があります

+1

これはOPでは機能しません。 – AndyG

+1

'getch()'は使わないでください。 conio.hは標準ではありません – Martin

0

システムのファイル終了シーケンスを押すと入力の最初と最後のループが終了するようです。これは事実上入力を閉じて、2番目のループはまったく実行されません。これは、デバッガでコードを1行ずつ進めばばかりではないでしょうか。

これを実行する代わりに、forループを使用して入力を読み取ってください。あなたが入力を終了するためにファイルの終わりのシーケンスを使用する必要はありませんし、割り当てられたメモリの境界から外れないように保護されるでしょう(なぜ静的な配列を使っていないのですか?固定数の要素を割り当てますか?)。

+0

forループはそのトリックでした。私はEOFが問題だと知っていますが、何らかの形で悪い入力から保護するためのインプットが欲しかったです。 将来の使用のために、行列が非常に大きくなる可能性がある(私は現在そこに含まれている関数をテストしています。なぜサイズが3に固定されているのか、将来、行列はファイル) – user403033

関連する問題