2017-03-07 83 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; 
    } 

读取矩阵和矢量的功能是

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头文件以使用getch

+1

这不适用于OP。 – AndyG

+1

请勿使用'getch()'。 conio.h不在标准 – Martin

0

您似乎通过按下系统的文件结束顺序来结束第一个(和第二个)输入循环。这有效地关闭了输入,所以你的第二个循环根本不被执行。这应该是非常明显的,如果你在调试器中逐行执行代码。

而不是使用for循环来读取输入。这样你就不必使用文件结束序列来终止输入,你也可以(或者应该)保护你的内存不会超出你分配的内存范围(为什么你不使用静态数组分配固定数量的元素?)。

+0

A for循环做了诀窍。我知道EOF是个问题,但我想要一个能以某种方式防止不良输入的输入。 动态内存分配供将来使用,其中矩阵可能会变得非常大(我目前正在测试其中包含的函数,因此为什么大小固定为3,将来矩阵将从文件中读取) – user403033