Dziwna zmiana zawartości zmiennej znakowej lub wypisanie na ekran innej.

0

Witam!
Niedawno utworzyłem sobie bibliotekę, dosyć prostą (dwie dwuwymiarowe tablice znakowe (char):bufor i ekran, procedura która przypisuje wartości z tablicy bufor do tablicy ekran za pomocą pętli for); napisałem prosty programik, który ma zapytać o znak i wypełnić nim ekran(wszystko wykomentowane, no prawie wszystko). Tak więc kompiluję, uruchamiam, i...
...i niby działa dobrze, tylko ostatnich kilka linii jest wypełniona znakami "=" zamiast podanym przeze mnie na przykład znakiem "6".
Kod programu:

#include<iostream.h>
#include<conio.h>
#include<stdio.h>

char znak;



int main()
{          //Poczatek funkcji
 clrscr(); //wyczyszczenie ekranu, ponizej wypelnienie linii znakami "="
 cout<<"================================================================================"<<endl;
 cout<<endl;     //wstawienie pustej linii
 cout<<"Podaj znak, jakim zapelnic ekran: "; //wypisanie napisu w linii
 cin>>znak;        //wczytanie wartosci do zmiennej "znak"
 cout<<endl;       //wstawienie pustej linii
 clrscr();
 int znak_old=znak;
 for(int i=0;i<50;i++) //argumenty petli for
 {                      //poczatek petli for
  for(int j=0;j<80;j++) //argumenty zagniezdzonej petli for
  {                     //poczatek zagniezdzomej petli for
   znak=znak;
   bufor[j,i]=znak;     //wczytanie do zmiennej bufor[j,i] wartosci zmiennej znak
   przypisz();          //skopiowanie wartosci zmiennej bufor[j,i] do zmiennej ekran[j,i]
   cout<<ekran[j,i];    //wypisanie na ekran zawartosci zmiennej ekran[j,i]
   getch();
   if(znak!=znak_old)
   {
    znak=znak_old;
   }
  }                     //koniec zagniezdzonej petli for
  if(j<=79)             //argumenty instrukcji warunkowej if
  {                     //poczatek instrukcji warunkowej if
   cout<<endl;          //przejscie do nastepnej linii
   getch();
  }                    //koniec if
 }                     //koniec for
 getch();
 clrscr();
 cout<<endl;           //wstawienie nowej linii, ponizej wypelnienie linii znakami "="
 cout<<"================================================================================"<<endl;
 getch();              //oczekiwanie na nacisniecie klawisz
 return 0;              //deklaracja wartosci zwracanej przez funkcje main
}                       //zakonczenie funkcji main

Kod biblioteki:

char bufor[80,50];
char ekran[80,50];

void przypisz()
{
 for(int i=0;i<80;i++)
 {
  for(int j=0;j<50;j++)
  {
   ekran[i,j]=bufor[i,j];
  }
 }
}

Programuję w Turbo C++.
Z góry dzięki za odpowiedź i pozdrawiam.

Mister5Master

0
char bufor[80,50];
char ekran[80,50]; 

Od kiedy to w c++ tak deklaruje sie tablice?

0

No u mnie działa, w turbo c++ inaczej trochę niż np. w dev-c++.

1

No u mnie działa, w turbo c++ inaczej trochę niż np. w dev-c++.

prog.cpp:4:14: error: expected ‘]’ before ‘,’ token
 char bufor[80,50];
              ^
prog.cpp:4:15: error: expected unqualified-id before numeric constant
 char bufor[80,50];

Może to jakieś rozszerzenie turbo C++, w każdym razie nie powinno działać (powinno być char bufor[80][50])

ekran[i,j]=bufor[i,j];

O ile borland C++ ma coś wspólnego z C++ (jako że Ci ten kod działa, zgaduje że nie ma), to działa tutaj operator przecinek: http://zepsul.pl/programowanie/zapomniany-operator-przecinka

http://ideone.com/YIyrlm

#include <iostream>
using namespace std;

int main() {
	int tab[10];
	for (int i = 0; i < 10; i++) tab[i] = i;
	cout << (1, 2, 3) << endl; // 1, 2, 3 = 3
	cout << tab[1, 2] << endl; // 1, 2 = 2
	return 0;
}
3
2
0

jak dam [80][50] po próbie kompilacji wyskakuje błąd: Invalid Indirection

1
  1. Zmien srodowisko.
  2. Ten twoj kod jest strasznie haotyczny.
    Np. po co taka operacja : znak=znak;
    Lub dlaczego do przechowywania jednego znaku stosujesz tablice i to az 2 skoro
    to tylko jeden znak?
0

@Mister5Master Bo musisz indeksowanie zmienić wszędzie! A nie tylko przy deklaracji tablicy.

0

to

znak=znak; 

to był akt desperacji, a 2 tablice to tylko przygotowanie do późniejszego wykorzystania. Proszę jeszcze o próbę kompilacji w turbo c++.

0

Już wiem! To dane z cout'a siedzące gdzieś w pamięci. Kiedy zamieniłem i z j to na końcu linii wyświetlała się część pytania o znak, czyli to siedzi gdzieś tam w pamięci. Czasem rozwiązanie samo do głowy przyjdzie. Tak, czy tak, dzięki za pomoc. Jutro dokonam poprawek i podzielę się wynikiem.

0

@Mister5Master a myślałeś że co? Że skąd to program bierze? Leży sobie gdzieś na stosie a jak wyłazisz poza swoje tablice to możesz trafić na te dane...

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