Zapełnianie tablicy

2015-10-14 11:38
Czarny Samiec
0

Witam,
próbuję napisać program, któremu podaję wartość- rozmiar tablicy, a następnie zapełniam ją podanymi danymi. Następnie chcę wyświetlić podane dane w odwrotnej kolejności.

#include <iostream>
using namespace std;
int main()
{
int t;

//std::cin.clear();
std::cin>>t;
cout<<t;
int tablica[t];
int i;
for( i=0;i<t;i++); 
{std::cin.clear();
              int zmienna;
              std::cin>>zmienna;     
        //std::cin>>tablica[i];
        tablica[i]=zmienna;
}   

for( i=t-1;i>=0;i--)
{
   // count<<"\n liczba:"<<count (tablica[i]);    
    std::cout << "Liczba : " << tablica[i];
}

system("pause");
return 0;
}

Mam coś takiego,a le mi nie działa. Ktoś ma pomysł dlaczego?

Pozostało 580 znaków

2015-10-14 11:42
kq
2

Zacznij od poprawnego formatowania kodu. Np:

#include <iostream>
using namespace std;
int main()
{
    int t;

    // std::cin.clear();
    std::cin >> t;
    cout << t;
    int tablica[t];
    int i;
    for (i = 0; i < t; i++)
        ;
    {
        std::cin.clear();
        int zmienna;
        std::cin >> zmienna;
        // std::cin>>tablica[i];
        tablica[i] = zmienna;
    }

    for (i = t - 1; i >= 0; i--)
    {
        // count<<"\n liczba:"<<count (tablica[i]);
        std::cout << "Liczba : " << tablica[i];
    }

    system("pause");
    return 0;
}

Teraz znalezienie błędu jest trywialne:

    for (i = 0; i < t; i++)
        ;

Przy okazji:

  1. to nie jest poprawny kod w C++, wielkość tablicy musi być znana w czasie kompilacji. Jeśli tak nie jest, użyj tablicy dynamicznej, np. std::vector
  2. Tragiczne formatowanie kodu utrudnia jego zrozumienie i szukanie błędów
  3. Nie używaj system("pause") do łapania konsoli. Od tego są IDE lub odpalanie programu bezpośrednio w konsoli.
  4. Cały program można zapisać tak: (to bardziej na dalszą przyszłość, na początku może wydawać się mało zrozumiałe)
    vector<int> tab;
    int tabSize;
    cin >> tabSize;
    tab.reserve(tabSize);
    copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(tab));
    copy(tab.crbegin(), tab.crend(), ostream_iterator<int>(cout, ", "));

    http://melpon.org/wandbox/permlink/XUHwExG9OYOVuarR


edytowany 1x, ostatnio: kq, 2015-10-14 11:47

Pozostało 580 znaków

2015-10-14 11:43
3

cout<<t;
int tablica[t];

To może nie zadziałać w w standardzie C++ nie ma VLA

dodatkowo masz średnik po for

for( i=0;i<t;i++);

jak go usuniesz, to kod w bloku z danymi się wykona więcej niz jeden raz (dokładniej t razy)


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
edytowany 1x, ostatnio: kaczus, 2015-10-14 11:46

Pozostało 580 znaków

2015-10-14 11:47
1

Popraw formatowanie: http://format.krzaq.cc/, styl file. Jak to zrobisz to od razu zauważysz, że coś jest nie tak.
Główny problem leży w średniku na końcu tej linii

for( i=0;i<t;i++); 

Ale oprócz tego:

int tablica[t];

to jest niepoprawne w C++. Rozmiar tablicy nie może być zmienną. Niektóre kompilatory na to pozwalają, ale nie korzystaj z tego póki się uczysz. Poprawnymi rozwiązaniami są new[]/delete[] lub (lepsze) std::vector

std::cin>>t;

masz using namespace std, więc nie musisz za każdym razem pisać std::

std::cin.clear();

zbędne

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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