暂停输入C ++

时间:2017-03-07 15:48:32

标签: c++ input user-input

我正在尝试编写一些允许输入矩阵的代码,然后计算矩阵的逆矩阵,然后计算向量的输入。但是,一旦输入了矩阵值,我就无法让代码暂停并等待向量条目,它只是执行主要的其余部分,默认情况下用零填充向量。是否可以重置输入或某些内容,以便在我想填充向量时控制台将等待输入?

#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;
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

要暂停直到用户按下某个键,请使用getch()。您需要包含conio.h头文件才能使用getch