类方法不起作用

时间:2016-04-02 14:45:18

标签: c++ class oop

class automat
{
    int stari[50], sf[50], n, nsf, si;

    char m[50][50];

    public:
    automat(int a, int b) { setn(a); setstari(); setnsf(b); intitsf(); initm(); }

    void setn(int a) { n = a; } //init. nr de stari

    void setstari() { for (int i = 0; i < n; i++) stari[i] = i; } // init. starile

    void setnsf(int a) { nsf = a; } // init. nr de stari finale

    void intitsf() { for (int i = 0; i < nsf; i++) sf[i] = 0; } //init stari finale cu 0 la inceput

    void initm() { for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) m[i][j] = NULL; } // init muchii cu 0 la inceput

    void setsf(int a) { sf[a] = 1; } // seteaza o stare finala

    void addm(int a, int b, char c) { m[a][b] = c; } // adauga muchie

    void setsi(int a) { si = a; } // seteaza starea initiala

    void afismuchii()
    {
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                if (m[i][j] != 0)
                    cout << i << " se duce in " << j << " cu " << m[i][j] << endl;
    }
};




int main()
{
    ifstream f("file.txt");

    int n, m, F;
    f >> n; f >> m; f >> F;

    automat a(n, F);

    int x, y; char c;

    f >> x;
    a.setsi(x); //init. stare initiala

    while (F) // init. stari finale
    {
        f >> x;
        a.setsf(x);
        F--;
    }

    while (m) // init. muchii
    {
        f >> x; f >> c; f >> y;
        a.addm(x, y, c);
        m--;
    }

    a.afismuchii();
}

请原谅我的评论和功能名称。

在程序结束时,当我运行“a.afismuchii();”我应该得到:

0用1转到1 0与b

一起变为1

但是,矩阵是NULL,我只得到:

0变为1 0随着

变为1

所以addm()方法可能无法正常工作,但我不明白为什么。

3 个答案:

答案 0 :(得分:0)

automat中,m是类型为char的二维数组。 afismuchii方法将此数组的char输出为标准输出作为字符,而不是数字,这看起来就像你想要的那样。要得到一个数字,你需要先投射它。

这是因为当您将char输出到ostream时,您会获得char输出,而不是它的数值。 cout << 'A';将输出A,而不是65,这是char字符通常拥有的A数字值。所以afismuchii中的行应该是:

cout << i << " se duce in " << j << " cu " << static_cast<int>(m[i][j]) << endl;

答案 1 :(得分:0)

我想这是有效的,因为cout是件事。 如果将NULL定义为0,则不会cout这样。

  

但是,矩阵是NULL,我只得到:

     

0变为1,0变为1,

其次, 由于m[][]char,因此与0比较是不合适的。

if(m[i][j]!=0)

可能是

if(m[i][j]!=NULL)

最后, 我建议你在调用addm之前验证输入 因为整数小于50(且不小于0),并且字符有意义(可读?)。

答案 2 :(得分:0)

你必须把(m [i] [j])强制转换为static_cast(m [i] [j])