[C] Ochrona programu przed glupota


(Cezarycezary2) #1

Jak ochronić program by użytkownik nie mógł wpisać niechcianych danych np. żeby jedynymi poprawnymi wpisami były liczby od 1 do 5.

Chodzi mi o to żeby program skanował wpisaną daną tak długo, aż w końcu użytkownikowi się uda wpisać to co trzeba

Najlepiej by było gdyby zostało to zrobione za pomocą funkcji. :smiley:


(Sawyer47) #2

Hmm C... ogólnie to wczytuje się jako tekst, sprawdza czy jest to liczba, konwertuje i już.. a jak użytkownik poda źle, to prosi się go jeszcze raz...

Tu jest co nieco o napisach w C:

http://pl.wikibooks.org/wiki/C/Napisy


(Cezarycezary2) #3

teoretycznie to wiem mniej więcej jak to zrobić, gorzej z praktyka dlatego tez proszę o chociaż najważniejszy kawałek kodu

głównie chodzi o ochronę przed wpisaniem zamiast liczb litery, i żeby wtedy program się nie rozsypywał


(Sawyer47) #4

To jest kod w C++, ale myślę, że bez problemu przerobisz go na C. Pod tym względem C nie jest zbyt wygodne, ale cóż.

#include 

#include 


using namespace std;


int main() {


string num;

int liczba;

	do {

		cout << "Podaj liczbę: ";

		getline(cin, num, '\n');

		liczba = atoi(num.c_str());

		if(num == "0") break;

	} while(liczba == 0);


	cout << "Podana liczba to: " << liczba << " a podniesiona do kwadratu: " << liczba * liczba << endl;

}

To może Ci się przydać: http://www.cppreference.com/stdstring/index.html


(Ludr) #5

Zajrzyj tutaj http://forum.dobreprogramy.pl/viewtopic.php?t=198235&highlight=


(Cezarycezary2) #6

naprawde bardzo bym prosił o kawałek kodu w jezyku ((( C ))) bo naprawde nie potrafie tego wszytskiego zamieniac zmieniac, chociaz niech ktos mi podsunie jakis sposob w jaki mozna to zrobic


(Ludr) #7

Jesteś bardzo leniwy. Po pierwsze nie użyłeś opcji szukaj. A po 2 (patrz wyżej) podałem link gdzie taki temat był poruszany.

Na przyszłość pamiętaj o tym. (poniżej zamiesczam kod)

(Pobiera znaki od 1 do 5) przedział <1,5>

//Derka kod w C

#include 

#include 

#include 


void getnum( int &wsp); 


int main(void) 

{ 

    int a; 

    getnum(a); 

    printf("\nWartosc a: %i",a);  


 _getch();    

 return 0;        

}  

/ ****************************************************************************** / 

void getnum( int &wsp) 

{      

      int cntr=0; char zn , array [10]={0}, * num=array; 


   do { 

       zn=_getch(); if ((zn>='1' && zn<='5')) 

       {printf("%c",(*num=zn)); num++; cntr++;} 

       else if(zn=='\b' && cntr!=0) { printf("\b \b"); num--; cntr--;}  

      }while (zn!=13 && cntr<9); 

      if (cntr==0 && zn==13) printf("0"); 

      *num='\0'; wsp=(atoi(num-cntr));    

} 

/ ****************************************************************************** /

//Derka kod w C++

#include 

using std::cout;

#include 


void getnum( int &wsp); 


int main() 

{ 

    int a; 

    getnum(a); 

    cout<<"\nWartosc a: "<
      

 _getch();    

 return 0;       

}  

/ ****************************************************************************** /

void getnum( int &wsp) 

{      

      int cntr=0; char zn , array [10]={0}, * num=array; 


   do { 

       zn=_getch(); if ((zn>='1' && zn<='5')) 

       {cout<<(*num=zn); num++; cntr++;} 

       else if(zn=='\b' && cntr!=0) { cout<<"\b \b"; num--; cntr--;}  

      }while (zn!=13 && cntr<9); 

      if (cntr==0 && zn==13) cout<<"0"; 

      *num='\0'; wsp=(atoi(num-cntr));    

} 

/ ****************************************************************************** /[/code]
[/code]

(Cezarycezary2) #8

Czy jest mozliwe rozszerzenie dzialania tej funkcji zeby pobierala liczby z zakresu wiekszego, dwucyfrowego, zeby akceptowal liczby od 1 do 99??