从c ++中的标准输入读取

时间:2015-04-20 08:38:44

标签: c++ class templates matrix cin

编辑: 主要问题已经解决,功能几乎可以工作,现在我的问题是我只想读取数字行,当用户点击输入时,因为它是一个temptale函数,它没有检测到' \ n&# 39 ;.那么我怎么能解决这个问题呢?


我有一个temptale函数,它应该从标准输入读取一个矩阵(所以我只能使用cin>>来读取)到特定的类。

输入将是这样的:

4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

前两个数字表示宽度,第二个数字表示矩阵的高度。该行中的其他数字是矩阵本身的数字。 (例如:它读取它将是一个4x4矩阵。那么它应该连续读取4个数字并将其放入矩阵的第一行。然后再读取4个数字等等...) 当用户点击进入时,输入应该结束。 如果用户没有以正确的形式输入(例如:数字不够),则应该抛出一条消息"输入错误"并从头开始。

该功能的草图将是这样的:

template <class T>
T& be_osztaly(){ // szabványos kimenetrõl beolvas egy mátrixot (ez fogjka a két mátrixot, az eredménymátrixot és ezek magasságait/szélességeit beolvasni és eltárolni).
    bool l = true;
    int szamlalo = 0;
    Peldamatrix<T> uj;
    T epp;
    while(szamlalo!=(uj.getx() * uj.gety()) ){
        cin >> epp;
        uj.setx(epp);
        cin >> epp;
        uj.sety(epp);

        l = true;
        while(l){
            for(int i=0;i<uj.getx();i++){
                for(int j=0;j<uj.gety();j++){
                    cin >> epp;
                    szamlalo++;
                    if(epp == '\n'){ // if (epp == endl)
                    l = false;
                    }
                if(szamlalo>(uj.getx() * uj.gety())) { throw "Ovextension!\n"; }
                uj.getaltombelem(i,j) = epp;
                }
            }
        }
        if(szamlalo<(uj.getx() * uj.gety())) {  throw "Not enought imput!!\n"; }
    }
    return &uj;
}

Peldamatrix课程将是这样的:

template <class S>
class Peldamatrix{
private:
    S* tomb[];
    int x;
    int y;
public:
    Peldamatrix(){
        tomb = new S*[s];
        for(int i=0;i<s;i++) { tomb[i] = new S[h]; }
    }

    S* operator[](const int index){
        return tomb[index];
    }

    int getx() {return x;}
    void setx(int v) {x=v;}

    int gety() {return y;}
    void sety(int v) {y=v;}

    S* gettomb() {return tomb;} // Ezt így lehet?
    S* getaltomb(const int index) {return tomb[index];}
    S getaltombelem(const int index, const int alindex) {return (tomb[index])[alindex];} // This seems to be not working but I haven't figured out how to yet

    Peldamatrix& operator=(const Peldamatrix &kulso){ 
        if(this = &kulso) {return *this;}; másolni!
        tomb = kulso.gettomb();
        for(int i=0;i<x;i++) { tomb[i] = kulso.getaltomb(i); } 
        x = kulso.getx();
        y = kulso.gety();
        return *this;
    }

    ~Peldamatrix(){
        for(int i=0;i<x;i++) { delete[] tomb[i]; }
        delete[] tomb;
    }
};

0 个答案:

没有答案