odsadenie v C

Programovacie jazyky, rady, poradňa...
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

odsadenie v C

Príspevok od používateľa beluský »

mám ďaľšiu otázku...
... ako docielim, aby vypísané čísla boli odsadené zľava o počet miest, ktoré je udané najdlhším číslom??

napr.

Kód: Vybrať všetko

 27
  9
 85
619
ďakujem...
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

Kód: Vybrať všetko

printf("%6i",hodnota)
% - formatovaci znak
i - hodnota typu int
6 - 6 miest pred desatinnou ciarkou(po tvojom zlava)
6.6 - 6 miest pred a 6 za desatinnou ciarkou.
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

to viem, ale ja neviem aké veľké čísla to budú... čítam ich totiž zo súboru... čiže neviem na koľko ich mám zarovnať

a potrebujem ich zarovnať vždy na vzhľadom na to najväčšie číslo
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

takto to nepochopim budes musiet dat podrobny jendoduchy popis
co ja si myslim tak mas nejaky subor z neho nacitas prvky do pola ci jak ? ten subor je textovy alebo binarny?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Keď nevieš, aké veľké je to najväčšie číslo, budeš to musieť najskôr zistiť a až potom to budeš vypisovať (počet miest môžeš zistiť napr. pomocou logaritmu).
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

juho napísal:takto to nepochopim budes musiet dat podrobny jendoduchy popis
co ja si myslim tak mas nejaky subor z neho nacitas prvky do pola ci jak ? ten subor je textovy alebo binarny?
ano subor je textovy a na kazdom riadku je jedno cislo... mam tie cisla ulozit do pola a potom ich vypisat s tym odsadenim...

vlastne ja potrebujem zistit najdlhsie cislo a potom tu hodnotu dosadiť za formátovací znak % a tak vlastne odsadeniť všetky tie čísla...
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

chrono napísal:Keď nevieš, aké veľké je to najväčšie číslo, budeš to musieť najskôr zistiť a až potom to budeš vypisovať (počet miest môžeš zistiť napr. pomocou logaritmu).
pomocou logaritmu? môžeš upresniť? díky...
existuje funkcia na zistenie počtu cifier čísla bez pretypovania na string?

lebo skúšal som to číslo pretypovať na string a potom pomocou funkcie strlen v C zistiť dĺžku stringu, lenže sme to ešte nebrali, tak mi to nejak nešlo....

ešte som rozmýšľal, že by som hladal zvyšok po delení 10,100,1000.... a keď ty som dostal 1 tak by to číslo malo vlastne 2,3,4... cifry.. ale to by som musel deliť x koľkokrát...
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

ked to chces hentym sposobom tak to by som chcel vidiet ze ako doplnis za % nejaku premennu. musis to vyriesit nejak inak.
napriklad prazdnymi miestami.
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

juho napísal:ked to chces hentym sposobom tak to by som chcel vidiet ze ako doplnis za % nejaku premennu. musis to vyriesit nejak inak.
napriklad prazdnymi miestami.
aj som si myslel, že to nepôjde...
... takže mi ostáva zistiť počet cifier najväčšieho čísla (pc_max) a potom to odčítavať od počtu cifier každého čísla (pc_cisla) a toľko medzier vlastne napíšem pred každé číslo... hm... ale stále neviem ako zistím ten počeť cifier...

... vďaka za ochotu...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Kód: Vybrať všetko

#include	<stdlib.h>
#include	<stdio.h>
#include	<string.h>
#include	<math.h>

#define	MAX_NUMBERS	32

int dlzka(int n)
{
	if (n == 0) return 1;
	else return log10(n)+1;
}

int main(void)
{
	FILE		*file;
	int		num, i;
	int		numbers[MAX_NUMBERS];
	int		count = 0, maxlen = 0;

	file = fopen("numbers.txt", "r");
	if (file == NULL) {
		return EXIT_FAILURE;
	}
	while (fscanf(file, "%i", &num) > 0) {
		if (maxlen < dlzka(num)) maxlen = dlzka(num);
		numbers[count] = num;
		count++;
		if (count >= MAX_NUMBERS) break;
	}
	fclose(file);

	fprintf(stdout, "Pocet: %i\nMaximalna dlzka: %i\n", count, maxlen);

	for (i = 0; i < count; i++) {
		fprintf(stdout, "%*i\n", maxlen, numbers[i]);
//		fprintf(stdout, "%2$*1$i\n", maxlen, numbers[i]); // alebo môžeš použiť toto
	}

	return EXIT_SUCCESS;
}
Tá funkcia dlzka momentálne funguje iba s kladnými číslami, ale upraviť ju tak, aby fungovala aj so zápornými je jednoduché.
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

Vďaka Chrono,
ja som to riešil cez stringy a funckiu strlen, ale to tvoje sa mi zdá vhodnejšie, vďaka...
Napísať odpoveď