Anonymní profil Blaster – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Blaster – Programujte.comAnonymní profil Blaster – Programujte.com

 

Příspěvky odeslané z IP adresy 217.112.167.–

Blaster
C / C++ › Histogram
3. 4. 2016   #209569

Přesný původ chyby při zadávání jednoho čísla navíc se mi zkoumat nechtělo, nic méně za to můžou ty cykly for, které projíždějí pole, které neexistuje. Přesněji přetečou mimo rozsah proměnné někam jinam do paměti ( i <= p je špatně, protože rozsah proměnné pole v paměti je 0 <=> (p-1) ). Proto je lepší nedělat nikdy tak základní chybu a potom se třeba vyvaruješ nečekaného výstupu nad kterým zůstává rozum stát.

Tady jsem ti kód trochu zkrátil, spravil a zjednodušil:

#include <stdio.h>

int  i, j, p, k, a = 1;

int main()
{	
	printf("Kolik bys chtel zadat cisel? ");
	scanf("%d",&p);
	putchar('\n');
	
	double pole[p];
	
	for(i = 0; i < p; i++) {
		printf("Zadej %d.cislo: ", i+1);
		scanf("%lf", &pole[i]);
	}
		
	printf("\nVypis zadanych cisel:\n");
	for(i = 0; i < p; i++) printf("%.2lf ", pole[i]);
		
	printf("\n\nKolik kategorii chces zobrazit (0-10,10-100,100-1000,atd.) ? ");
	scanf("%d", &k);
	if(k <= 0 ) k = 1;
	
	for(j = 1; j <= k; j++) {
		printf("\nVypis kategorie %d - %d:\n" , ( a == 1 ? 0 : a ) ,a*10);
		for(i = 0; i < p; i++) if( pole[i] >= ( a == 1 ? 0 : a ) && pole[i] <= a*10 ) printf("%.2lf ", pole[i]);
		a *= 10;
		putchar('\n');
	}
	
	return 0;			
}

 

 

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