dublowanie wpisów w prostej bazie danych C++

0

Nie potrafię sobie poradzić z dziwnym zjawiskiem w moim programie (kod poniżej). Kiedy przypisuję jakieś słowa komórkom 2 i 3, wszystko jest w porządku, ale gdy przypisuję jakieś słowo komórce 1, zdarza się (to zależy chyba od kolejności wprowadzania danych), że to samo słowo pojawia się w komórce 4 i vice versa. (Edit: sprawdziłem jeszcze kilka kombinacji i chyba mam tu do czynienia z czymś w rodzaju przepełniania się... czegoś? Może zmienna 'pozycja' wariuje?) Może wina leży po stronie pętli 'for' wypisującej dane, a może po prostu coś mi się pomieszało w tablicy? Proszę o pomoc.

#include <iostream>
#include <string>

using namespace std;

char pwTest;
char takNie;
int pozycja;
string tab[3];
string kom0 = "-";
string kom1 = "-";
string kom2 = "-";
string kom3 = "-";

int tabPokaz()
{
    //
    return 0;
}

int tabWpisz()
{
    //
    return 0;
}

int main()
{
    tab[0] = kom0;
    tab[1] = kom1;
    tab[2] = kom2;
    tab[3] = kom3;
    //Tablica jest pusta.
    cout << endl << "\tBAZA DANYCH W C++";
    cout << endl << endl;
    cout << "Wszystkie komorki sa puste.";
    cout << endl << endl;
    cout << "Pokaz dane (p)  /  Wpisz dane (w)\t";
    cin >> pwTest;
    while (pwTest != 0)
    {     
          while (pwTest == 'p')
          {
                system ("CLS");
                cout << endl;
                for (int i=1; i<=4; i++)
                {
                    cout << "\t" << i << ".  " << tab[i] << endl;
                }
                cout << endl;
                cout << "Pokaz dane (p)  /  Wpisz dane (w)\t";
                cin >> pwTest;
          }
          while (pwTest == 'w')
          {
                system ("CLS");
                pozycja = 0;
                cout << endl;
                cout << "Numer komorki: ";
                cin >> pozycja;
                cout << endl;
                cout << "Wprowadz dane: ";
                     switch (pozycja)
                     {
                            case 1:
                                 cin >> kom0;
                                 tab[pozycja] = kom0;
                                 break;
                            case 2:
                                 cin >> kom1;
                                 tab[pozycja] = kom1;
                                 break;
                            case 3:
                                 cin >> kom2;
                                 tab[pozycja] = kom2;
                                 break;
                            case 4:
                                 cin >> kom3;
                                 tab[pozycja] = kom3;
                                 break;
                     }
                
          cout << endl;
          cout << "Pokaz dane (p)  /  Wpisz dane (w)\t";
          cin >> pwTest;
          }
    }
    system ("CLS");
    cout << "Dziekuje!";
    cout << endl << endl;
system ("PAUSE");
return 0;
}
0

Nie wgłębiając się w kod już widzę jedno:

string tab[3];

    tab[0] = kom0;
    tab[1] = kom1;
    tab[2] = kom2;
    tab[3] = kom3;

Masz tablicę TRZECH elementów (0,1,2) a wpisujesz tam CZTERY elementy (0,1,2,3). Rozumiesz aluzję? ;)

0

No tak, zmieniłem to to na '4', ale nadal jakieś cuda się dzieją... Cokolwiek podam komórce 1 (czyli tablicowej '0'), to samo pojawia się w komórce 4.

Edit: Ha! Już nie jestem byle Noobem. Właśnie rozwiązałem problem i program hula! :)

0

niestety nadal jesteś byle noobem :(

1

Powiększyłeś tablicę do 4 czyli masz 0,1,2,3, a w kodzie:

 case 4:
              cin >> kom3;
              tab[pozycja] = kom3;

Wydrukuj sobie czcionką 32 i powieś nad biurkiem napis "TABLICA MA INDEKSY OD 0 DO ROZMIAR-1"

0

To samo, co wyżej:
for (int i=1; i<=4; i++)
ma być:
for (int i=0;i<4;++i)

1 użytkowników online, w tym zalogowanych: 0, gości: 1