Dodanie do programu nowych zabezpieczeń

0

Witam. Od razu zaznaczam że nie chcę gotowego kodu. Chciałbym abyście pomogli mi usprawnić program min aby jak najbardziej zabezpieczyć go przed użytkownikiem (złe wpisywanie etc). Program w założeniu ma wyznaczać losowo ciąg intów, zapisywać je w tablicy, liczyć wartość minimalną i maxylamną, sumę elementów parzystych.

Druga sprawa to czy da się napisać poniższe funkcje aby wyeliminować z nich n (wielkość tablicy, ilość losowanych liczb) ?

Trzecia kwestia: czy stosowanie etykiet to dobry pomysł?

Dziękuję za ewentualną pomoc i pozdrawiam. Oto kod:

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
using namespace std;

int pokaz_menu()
  {
  	int wyb;
  	//system("cls");
  	cout<<"                  MENU"<<endl<<endl;
  	cout<<"Co chcesz zrobic?"<<endl<<endl;
   cout<<"1. Wyznaczyc n losowych liczb z przedzialu <p,q>?"<<endl;
  	cout<<"2. Wyswietlic liste losowych liczb z podanego przedzialu?"<<endl;
  	cout<<"3. Wyznaczyc sume licz z wczesniej wyznaczonych?"<<endl;
  	cout<<"4. Wyszukac najwieksza i najmniejsa liczbe z wczesniej wyznaczonych?"<<endl;
  	cout<<"5. Eksportowac dane do pliku binarnego?"<<endl;
  	cout<<"6. Zakonczyc prace?"<<endl;
  	//cout<<"Wczytaj odpowiednia liczbe "<<endl;
  	cin>>wyb;
  	return  wyb;
  }
  
void uzupelnij(int* tab, int n, int& a, int& b)
  {
    int liczba;
    while (n > 0)
    {
    liczba = a + (rand() % (b-a+1));
    *tab = liczba;
    tab ++;
    n--;
    }
   
  }
  
void wyswietl (int* tab, int n)
  {
     for (int i = 0; i < n; i++)
        {
         cout << *tab << " ";
         tab++;
        }
     cout << "\n";
  
  }
  
void suma_parzystych (int* tab, int n)
{
   int suma = 0;
   for (int i = 0; i < n; i++)
   {
    if (!(*tab % 2)) suma += *tab;
    tab++;
   }
   cout << "Suma elementow parzystych wynosi: " << suma << "\n";
}

void min_max (int* tab, int n)
{
   int min = tab[0];
   int max = tab[0];
   for (int i = 0; i < n; i++)
   {
    if (min > *tab) min = *tab;
    if (max < *tab) max = *tab;
    tab++;
   }
   
   cout << "Wartosc minimalna: " << min <<"\nWartosc maxymalna: " << max << endl; 
}


int main()
 {
   srand( time( 0 ) );
   
   
   int n, p, q;
   
    cout << "Podaj ilosc liczb ktore chcesz wylosowac: "; cin >> n;
    int tab[n];
    //int ilosc = n;
    cout << "Podaj zakres z ktrego chcesz losowac: "; cin >> p >> q;
	   
    etykieta:
    int wybor = pokaz_menu();
     
              
     switch (wybor)
     {    
         case 1:
             
             uzupelnij(tab, n, p, q);
             cout << "OK\n";
             goto etykieta;
              break;
		         
         case 2:
              wyswietl(tab, n);
              goto etykieta; 
		            break;
         case 3:
              suma_parzystych (tab, n);
              goto etykieta; 
              break;
          case 4:
               min_max (tab, n);
               goto etykieta; 
               break;
          // case 5: 
          // break;
          case 6:
               exit(1);
               break;        
     }
    
   getch();
   return 0;
 } 
0

ten kod się w c++ nie skompiluje, dynamiczne tworzenie tablicy

int n;
cin >> n;
int t[n];

będzie to prawdopodobnie możliwe w c++14

dodanie znacznika <code class="cpp"> - Furious Programming

3
  • vector (pozbycie sie n)
  • http://4programmers.net/C/FAQ/Zabezpieczenie_przed_wpisywaniem_liter
  • main powinien robic jak najmniej (jak masz 10 linijek w main to juz duzo)
  • etykiety (goto) jest w 99,99% nieuzasadnione i nalezy to unikac jak ognia
  • DRY, moglbys to goto zrobic po switchu np i juz masz kilka zbednych linijek mniej.
  • nazywaj zmienne tak by cos mowily
  • kup ksiazke clean code i poczytaj

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