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()方法可能无法正常工作,但我不明白为什么。
答案 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])