2016-04-02 5 views
-1
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 переходит в 1 с Ь

, но вместо этого, матрица NULL и я только получаю:

0 переходит в 1 с 0 переходит в 1 с

поэтому метод ADDM() не может работать должным образом, но я не понимаю, почему.

+2

Пожалуйста, измените код и добавьте правильный отступ. Без правильного отступа, код трудно читать. И если это трудно читать, кому-то будет труднее помочь вам в решении вашей проблемы. –

+1

Возможно, нам нужно посмотреть, что находится в файле .txt. И не совсем понятно, что вы пытаетесь достичь. Код достаточно прост, чтобы читать, не говоря уже об именах и комментариях на другом языке. И в довершение всего это отформатировано крайне плохо. – mwm314

ответ

0

Вы должны бросить (м [я] [J]) для static_cast (м [я] [J])

0

В automat, m представляет собой двумерную матрицу типа char. Метод afismuchii выводит символ этого массива на стандартный вывод как символ, а не как число, что похоже на то, что вы хотите. Чтобы получить номер, вам нужно бросить его первым.

Это связано с тем, что при выводе char на ostream вы получаете выход символа, а не его числовое значение. cout << 'A'; будет выводить A, а не 65, который является числовым значением a char, имеющим символ A. Таким образом, линия в afismuchii должно быть действительно:

cout << i << " se duce in " << j << " cu " << static_cast<int>(m[i][j]) << endl; 
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), и характер имеет смысл (читаемый?).

Смежные вопросы