Ošetření vstupů- jen kladná čísla z intervalu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ošetření vstupů- jen kladná čísla z intervalu – C / C++ – Fórum – Programujte.comOšetření vstupů- jen kladná čísla z intervalu – C / C++ – Fórum – Programujte.com

 

Pajda
~ Anonymní uživatel
10 příspěvků
18. 6. 2012   #1
-
0
-

Ahoj,  potřeboval bych poradit jak mám ošetřit vstupy, aby tam nešli zadat záporná čísla a zároveň jen čísla z intervalu 0-xx

typedef struct vozidla_struct
{
	char vyrobce[20];
	char typ[20];
	double pocet;
	double cena;
	vozidla_struct *pNI;
}vozidla;
                                                            
vozidla_struct *pFI=NULL;

//Funkcni prototypy
vozidla *konec (void);
int nove_vozidlo (void);
void hledej_vozidlo (void);
void mazani (void);
void pridani_vozidla (void);
void prodej_vozidla (void);
void vypis_vozidel (void);
int cteni_souboru (char*jmeno);

int _tmain(int argc, _TCHAR* argv[])
{
	char vyber;
	int nacteni;

		nacteni = (cteni_souboru("automobily.dat"));
	if ( nacteni > 0 )
		printf("\nSoubor byl uspesne nacten.\n");

	do
	{
	printf("*******************************************************************************\n");
	printf("\nDobry den, vitejte v seznamu vozidel nasi prodejny.\n");
	printf("\nVypis seznamu dostupnych vozidel - v\nZadani noveho vozidla do seznamu - n\nVymazani vozidla ze seznamu - m");
	printf("\nPrijeti vozidla na prodejnu - p\nProdej vozidla - s\nVyhledani vozidla - z\nKonec - k\n");
	printf("\n*******************************************************************************\n");
	printf("\nZadejte prosim Vas pozadavek:");
	vyber=getchar();
	vyber=toupper(vyber);
	while (getchar()!='\n');

	switch (vyber)
	{
	case 'N':
		nove_vozidlo();
		while (getchar()!='\n');
		system ("CLS");
		break;

	case 'Z':
		hledej_vozidlo();
		while (getchar()!='\n');
		system ("CLS");
		break;

	case 'S':
		prodej_vozidla();
		while (getchar()!='\n');
		system ("CLS");
		break;

	case 'P':
		pridani_vozidla();
		while (getchar()!='\n');
		system ("CLS");
		break;

	case 'M':
		mazani();
		while (getchar()!='\n');
		system ("CLS");
		break;

	case 'V':
		vypis_vozidel();
		while (getchar()!='\n');
		system ("CLS");
		break;
	
	case 'K':
		printf("\nNashledanou\n");
		while (getchar()!='\n');
		system ("CLS");
		break;

	default:
		printf("\nSpatna volba. Opakujte zadani.\n");
		while (getchar()!='\n');
		system ("CLS");
		break;
	}


	}while(vyber!='K');

	FILE*soubor=fopen("automobily.dat","w");
	vozidla *s=pFI;

	if(soubor==0)
	{
		printf("\nSoubor se nevytvoril");
	}

	while(s!=NULL)
	{
		fwrite(s,sizeof(vozidla),1,soubor);
		s=s->pNI;
	}

	fclose(soubor);	
	while (getchar()!='\n');

	return 0;
}

// Funkce

vozidla *konec (void)
{
	vozidla *ptemp;
	if(pFI==NULL)		//prazdna struktura
		return NULL;

	for(ptemp=pFI;ptemp->pNI!=NULL;ptemp=ptemp->pNI);
		return ptemp;
}

int nove_vozidlo (void)
{
	vozidla *pnovy,*ppomocna;

	if ((pnovy=(vozidla *) malloc(sizeof(vozidla)))==NULL)
		return 0;

	pnovy->pNI=NULL;
	printf("\nZadejte vyrobce vozidla: ");
	scanf("%20s",pnovy->vyrobce);
	while(getchar()!='\n');
	
	printf("\nZadejte typ vozidla: ");
	scanf("%20s",pnovy->typ);
	while(getchar()!='\n');

	printf("\nZadejte pocet vozidel: ");
	scanf("%Lf",&pnovy->pocet);
	while(getchar()!='\n');

	printf("\nZadejte cenu vozidla: ");
	scanf("%Lf",&pnovy->cena);
	while(getchar()!='\n');

	if (NULL==(ppomocna=konec()))	
		pFI=pnovy;
	else
		ppomocna->pNI=pnovy;

	return 1;
}

void hledej_vozidlo (void)
{
	char automobil[20], druh[20];
	double kusy,hodnota;
	vozidla *ptemp;


	if(pFI==NULL)
	{
		printf("\nNa prodejne nejsou zadna vozidla.\n");
		return;
	}

	printf("\nZadejte vyrobce automobilu: ");
	scanf("%20s",automobil);
	while(getchar()!='\n');

	printf("\nZadejte typ automobilu: ");
	scanf("%20s",druh);
	while(getchar()!='\n');

	
	ptemp=pFI;
	while(ptemp!=NULL)
	{
		if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
		{
			printf("\nVozidlo bylo nalezeno.\n");
			kusy=ptemp->pocet;
			hodnota=ptemp->cena;
			printf("\nNa prodejne je prave %12.2f vozidel tohoto typu.\nCena jednoho tohoto vozidla je %12.2f Kc.\n",kusy,hodnota);
			ptemp=ptemp->pNI;
			return;
			break;
		}
		else
		{
			ptemp=ptemp->pNI;
		}
	}
	printf("\nVozidlo nebylo nalezeno\n");
	return;
}

void mazani (void)
{
	char automobil[20],druh[20],souhlas;
	double kusy;
	vozidla *ptemp,*ptemp2;

	
	if(pFI==NULL)
	{
		printf("\nNa prodejne nejsou zadna vozidla.\n");
		return;
	}

	printf("\nZadejte vyrobce automobilu: ");
	scanf("%20s",automobil);
	while(getchar()!='\n');

	printf("\nZadejte typ automobilu: ");
	scanf("%20s",druh);
	while(getchar()!='\n');

	ptemp=pFI;
		if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
		{
			printf("\nVozidlo bylo nalezeno.\n");
			printf("\nOpravdu smazat? a/n? :");
			souhlas=getchar();
			while(getchar()!='\n');
			kusy=ptemp->pocet;

			if (souhlas=='a')
			{
				if (ptemp=pFI)
				{
					ptemp=pFI->pNI;
					free(pFI);
					pFI=ptemp;
				}
				printf("\nVozidlo bylo vymazano.");
				printf("\nPred vymazanim bylo v seznamu %12.2f vozidel.\n",kusy);
				while(getchar()!='\n');
				return;
			}
			else
			{
				printf("\nPozadovana akce nebyla provedena.\n");
				while(getchar()!='\n');
				return;
			}
		}
		else
		{
			ptemp=pFI;
				for(ptemp2=pFI,ptemp=pFI->pNI;ptemp!=NULL;ptemp2=ptemp,ptemp=ptemp->pNI)
				{
					if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
					{
						printf("\nVozidlo bylo nalezeno.\n");
						printf("\nOpravdu smazat? a/n? :");
						souhlas=getchar();
						while(getchar()!='\n');
						kusy=ptemp->pocet;

						if (souhlas=='a')
						{
							ptemp2->pNI=ptemp->pNI;
							free(ptemp);
							printf("\nVozidlo bylo vymazano.");
							printf("\nPred vymazanim bylo v seznamu %12.2f vozidel.\n",kusy);
							while(getchar()!='\n');
							return;
							break;
						}
						else
						{
							printf("\nPozadovana akce nebyla provedena.\n");
							while(getchar()!='\n');
							return;
						}
					}
				}
		}
	printf("\nVozidlo v seznamu nebylo nalezeno.\n");
	return;
}

void pridani_vozidla (void)
{
	char automobil[20],druh[20];
	double kusy,novinka;
	vozidla *ptemp;


	if(pFI==NULL)
	{
		printf("\nNa prodejne nejsou zadna vozidla.\n");
		return;
	}

	printf("\nZadejte vyrobce automobilu: ");
	scanf("%20s",automobil);
	while(getchar()!='\n');

	printf("\nZadejte typ automobilu: ");
	scanf("%20s",druh);
	while(getchar()!='\n');
	
	ptemp=pFI;
	while(ptemp!=NULL)
	{
		if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
		{
			printf("\nVozidlo bylo nalezeno.\n");
			printf("\nZadejte pocet novych vozidel: ");
			scanf("%Lf",&novinka);
			kusy=ptemp->pocet+novinka;
			printf("\nNa prodejne je %12.2f vozidel.\n",kusy);
			ptemp->pocet=kusy;
			while(getchar()!='\n');
			return;
			break;
		}
		else
		{
			ptemp=ptemp->pNI;
		}
	}
	printf("\nVozidlo v seznamu nebylo nalezeno.\n");
	return;
}

void prodej_vozidla (void)
{
	char automobil[20],druh[20];
	double kusy,novinka;
	vozidla *ptemp;

	if(pFI==NULL)
	{
		printf("\nNa prodejne nejsou zadna vozidla.\n");
		return;
	}

	printf("\nZadejte vyrobce vozidla: ");
	scanf("%20s",automobil);
	while(getchar()!='\n');

	printf("\nZadejte typ vozidla: ");
	scanf("%20s",druh);
	while(getchar()!='\n');

	ptemp=pFI;
	while(ptemp!=NULL)
	{
		if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
		{
			printf("\nVozidlo bylo nalezeno.\n");
			printf("\nZadejte pocet prodanych vozidel:");
			scanf("%Lf",&novinka);
			kusy=ptemp->pocet-novinka;
			if (kusy<0)
			{
				printf("\nNa prodejne neni dostatek pozadovanych vozidel. Prodej se neustutecnil.\n");
				while(getchar()!='\n');
				return;
				break;
			}
			else
			{
				printf("\nPocet kusu ve skladu: %12.2f\n",kusy);
				ptemp->pocet=kusy;
				while(getchar()!='\n');
				return;
				break;
			}
		}
		else
		{
			ptemp=ptemp->pNI;
		}
	}
	printf("\nVozidlo v seznamu nebylo nalezeno.\n");
	return;
}

void vypis_vozidel (void)
{
	vozidla *ptemp;

	printf("\n		Vyrobce		Znacka		Kusy	Cena");
	
	for(ptemp=pFI;ptemp!=NULL;ptemp=ptemp->pNI)
	{
		printf("\n%20s",ptemp->vyrobce);
		printf("%20s",ptemp->typ);
		printf("%12.2f",ptemp->pocet);
		printf("%12.2f",ptemp->cena);
	}

	printf("\n");
	return;
}
int cteni_souboru (char*jmeno)
{
	FILE *soubor=fopen(jmeno,"r");
	vozidla *s,*konec=NULL;
	unsigned int pocet_struktur, velikost,provedeno=0,i=0;
	unsigned int poloha=ftell(soubor);//zaloha aktualni pozice

	fseek(soubor,0,SEEK_END);//na konec
	velikost=ftell(soubor);//zjisteni velikosti
	fseek(soubor,poloha,SEEK_SET);//presun zpet

	pocet_struktur=velikost/sizeof(vozidla); //zjisteni poctu struktur

	for(i=0;i<pocet_struktur;i++)
	{
		s=(vozidla*)malloc(sizeof(vozidla));//alokace pameti
		if(s!=NULL)
		{
			provedeno=fread(s,sizeof(vozidla),1,soubor);
			if (provedeno>0)
			{
				if(pFI==NULL)
					pFI=s;
				s->pNI=NULL;
				if(konec!=NULL)
					konec->pNI=s;
					konec=s;
			}
			else
				break;
		}
		else
			break;
	}
	fclose(soubor);
	return provedeno;
}
                            
Nahlásit jako SPAM
IP: 89.102.243.–
Doomista+1
Stálý člen
18. 6. 2012   #2
-
0
-

   

//zápis
while(vstup<0 && vstup>=xx){
//zápis
}

nějak takhle?

Nahlásit jako SPAM
IP: 83.240.1.–
Na vše stačí iostream...
Pajda
~ Anonymní uživatel
10 příspěvků
19. 6. 2012   #3
-
0
-

ještě bych to potřeboval omezit jen  na celá čísla

Nahlásit jako SPAM
IP: 89.102.243.–
Matrix17
~ Anonymní uživatel
300 příspěvků
19. 6. 2012   #4
-
0
-

#3 Pajda
Tak to načítej jako celá čísla. ;)

Nahlásit jako SPAM
IP: 213.226.237.–
Pajda
~ Anonymní uživatel
10 příspěvků
19. 6. 2012   #5
-
0
-

jo to by taky šlo :-) 
Díky!

Nahlásit jako SPAM
IP: 89.102.243.–
CZechBoY+4
Věrný člen
19. 6. 2012   #6
-
0
-

#2 Doomista
tohle je blbost

ta podmínka by měla mít || a ne && - to co si napsal, tak je stejný jako false, pač jedno číslo nemůže bejt zároveň menší jak 0 a větší jak něco většího než nula

Nahlásit jako SPAM
IP: 213.192.10.–
Doomista+1
Stálý člen
19. 6. 2012   #7
-
0
-

#6 CZechBoY
nojo, máš pravdu, původně jsem to psal tak že to bralo jen čísla z toho intervalu a pak mi došlo, že to musím obrátit a zapoměl jsem obrátit i tohle

Nahlásit jako SPAM
IP: 195.113.191.–
Na vše stačí iostream...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 68 hostů

Podobná vlákna

Ošetření vstupu — založil Troy585

Ošetření vstupu — založil Caken

Osetreni vstupu — založil Prometheus

Ošetření vstupu — založil Erlesh

Ošetření vstupu. — založil Wades

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý