类方法不起作用

Class method not working

本文关键字:不起作用 类方法      更新时间:2023-10-16
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,带有0 与 b 一起变为 1

但相反,矩阵为 NULL,我只得到:

0 变为 10 变为 1

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

你必须将 (m[i][j]( 转换为 static_cast (m[i][j](

automat中,m是一个类型为 char 的二维数组。 afismuchii 方法是将此数组的 char 作为字符而不是数字输出到标准输出,这就是您想要的样子。 要获得一个数字,您需要先投掷它。

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

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

我想它正在工作,因为它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(,并且字符有意义(可读?