Żeby stworzyć tablicę o wielkości podanej przez użytkownika musiałbyś wykorzystać dynamiczną alokacje. W tym przypadku wystarczyłoby zrobić tak:
int *tablica = new int[n];
/* kod ... */
delete[] tablica;
I wszystko śmiga.
Co do kodu, to tak:
- najważniejsze - nie używaj zmiennych globalnych, no chyba, że to zło konieczne. Tutaj akurat nie jest to wcale uzasadnione. Czemu? Każdy programista Ci to powie, więc możesz wziąć na słowo :D A tak serio to chociażby kwestia analizy kodu. Jeśli coś jest globalne to czytasz funkcje, widzisz nagle linijkce succesCount = 10; i nie wiesz skąd to się wzieło, bo kod jest duży a czytasz samą funkcje. Po drugie kwestia kontroli nad miejscami modyfikacji zmiennej. Podobnie często jak szukasz problemu w niedziałąjącym programie to potrzebujesz znaleźć miejsca gdzie jakaś zmienna jest modyfikowana. Jeśli chodzi o zmienną globalną, to może ona być zmodyfikowana wszędzie, bo wszędzie jest do niej dostęp, a powiedzmy kod ma np 5 tysięcy linijek. No i lipa, tak trochę. Dlatego zmienne robi się lokalne, wtedy kod jest łatwiejszy w utrzymaniu i analizie. Czasem można wykorzystać zmienne globalne, ale generalnie o ile się da to się unika.
- linijka nr 5: zmienna m ma kiepską nazwe, wyobraź sobie, że czytasz kod kogoś kto nazywa zmienne a, b, c, d. Taki kod jest ultra mega hiper nieczytelny, musisz analizować wykorzystanie danej zmiennej żeby dojść do tego po co ona jest i co ona przechowuje. Co widać w Twoim kodzie, bo musiałem zejść do linijki 19, żeby zobaczyć, że to m to maks w tablicy. Tutaj nie jest to problematyczne, bo kod ma kilka linijek, ale przy większych aplikacjach deskryptywne nazwy to podstawa. Powinieneś zatem nazwać zmienną m chociażby max, albo obecnyMax, albo maksymalnaWartoscWTablicy, nie bój się długich nazw. O ile nie piszesz w notatniku to napiszesz 3 litery a potem zrobisz taba i Ci edytor dopisze końcówkę długiej nazwy, a bardzo zyskujesz na czytelności. W komercyjnym kodzie często robi się zmienne, których nazwy są długie jak zdania w stylu maxPingKiedyUzytkownikNieJestPolaczony.
- nazwa "liczba" tablicy też jest mało intuicyjna, o niebo lepsza byłaby już nazwa liczby
- w linijce piątej wykorzystujesz śmieci, m = liczba[0], w szufladkach świeżo stworzonej tablicy są jakieś losowe liczby, wykorzystanie ich wartości to jawny błąd ;P
- lnijka 21: nierówne wcięcie, które sugeruje, że cout jest w forze, a nie jest. Pilnowanie wcięć jest bardzo ważne.
- teraz już się czepiam, ale chcialeś :D - linijka 19 - nie trzymasz się swojej konwencji :P Ciała forów są w klamrach mimo, że są pojedyńczą linijką, a ifa zrobiłeś bez klamr i jeszcze bez entera ;P Generalnie instrukcje po ifie w tej samej linijce są takie sobie, rób enter i najlepiej jescze klamry, chyba, że bardzo chcesz oszczędzać na linijkach.
Kod jest krótki, więc ciężko znaleźć dużo błędów, ale mimo wszystko trochę się znalazło. Z czego oczywiście większa część to kwestia pisania czytelnego kodu, czytelnego dla kolegi, nauczyciela, czy Ciebie czytającego go za kilka miesięcy :P.