C++ 类方法不起作用 类自动机 { int stari[50],sf[50],n,nsf,si; charm[50][50]; 公众: 自动机(inta,intb){setn(a);setstari();setnsf(b);intitsf();initm();} void setn(inta){n=a;}//init.nr de stari void setstari(){for(inti=0;ix;f>>c;f>>y; a、 addm(x,y,c); m--; } a、 afismuchii(); }

C++ 类方法不起作用 类自动机 { int stari[50],sf[50],n,nsf,si; charm[50][50]; 公众: 自动机(inta,intb){setn(a);setstari();setnsf(b);intitsf();initm();} void setn(inta){n=a;}//init.nr de stari void setstari(){for(inti=0;ix;f>>c;f>>y; a、 addm(x,y,c); m--; } a、 afismuchii(); },c++,class,oop,C++,Class,Oop,请原谅我的评论和功能的名称 在程序结束时,当我运行“a.afismuchii();”时,我应该得到: 0通过一个 0与b一起转到1 但是,矩阵为空,我只得到: 0与0一起转到1 0与0一起转到1 因此,addm()方法可能无法正常工作,但我不明白原因。在自动机中,m是一个类型为char的二维数组。afismuchii方法是将此数组的字符作为字符而不是数字输出到标准输出,这是您想要的。要获得一个数字,您需要我想先投 这是因为当您将char输出到ostream时,您得到的是char输出,而不是数值。

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

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

0通过一个 0与b一起转到1

但是,矩阵为空,我只得到:

0与0一起转到1 0与0一起转到1


因此,addm()方法可能无法正常工作,但我不明白原因。

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


这是因为当您将
char
输出到
ostream
时,您得到的是char输出,而不是数值。
cout我猜它工作是因为它是某种东西。
如果NULL被定义为0,它就不会像那样
cout

但是,矩阵为空,我只得到:

0使用0转到1使用0转到1

第二,, 由于
m[][]
char
,因此与0进行比较是不合适的

如果(m[i][j]!=0)

可能是

如果(m[i][j]!=NULL)

最后,, 我建议您在调用
addm

由于整数小于50(且不小于0),且字符有意义(可读?。

您必须将(m[i][j])强制转换为静态(m[i][j])

请编辑您的代码,并添加适当的缩进。如果没有适当的缩进,代码将很难阅读。如果代码很难阅读,则有人将更难帮助您解决问题。我们可能需要查看file.txt中的内容。您试图完成的内容不太清楚。代码很难阅读,更不用说姓名/co了mments是另一种语言,最重要的是它的格式非常糟糕。
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();
}
cout << i << " se duce in " << j << " cu " << static_cast<int>(m[i][j]) << endl;