编辑: 主要问题已经解决,功能几乎可以工作,现在我的问题是我只想读取数字行,当用户点击输入时,因为它是一个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;
}
};