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(); }
请原谅我的评论和功能的名称 在程序结束时,当我运行“a.afismuchii();”时,我应该得到: 0通过一个 0与b一起转到1 但是,矩阵为空,我只得到: 0与0一起转到1 0与0一起转到1C++ 类方法不起作用 类自动机 { 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输出,而不是数值。
因此,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;