Vícenásobné vypsání printf – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vícenásobné vypsání printf – C / C++ – Fórum – Programujte.comVícenásobné vypsání printf – C / C++ – Fórum – Programujte.com

 

JokerTwo
~ Anonymní uživatel
7 příspěvků
3. 11. 2016   #1
-
0
-

 Zdravím.

     Mohl by mne prosím někdo pomoci a hlavně vysvětlit co dělám špatně. Můj cíl byl takový ,že si na začátku vytvořím strukturu OSOBA. Dále si vytvořím pole takovýchto struktur a pomoci for cyklu a funkce OSOBA pridej_osobu() je postupně naplním daty. Na závěr by běžela nekonečna smyčka pomocí switche by se jednotlivě vypisovaly. Jenže vznikl poblém pri tom naplnovaná daty ve for cyklu. Nevím proč ale prvni iterace proběhne v pořádku ale při druhé se vypíší dva printf najednou ,jakoby se přeskocila funkce (fgets(pom_pole, 25,stdin); ).... mohl by mě prosím někdo poradit proč to tak je??? 

Děkuji

/*
 * Osoba.c
 *
 *  Created on: 3. 11. 2016
 *      Author: Jokertwo
 */

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



typedef struct {
	char jmeno[25];
	int vek;
	int vaha;
}OSOBA;

void tiskni_osobu(OSOBA *os);
OSOBA pridej_osobu();

int main(int argc, char **argv) {

	/*
	 * pisu to v eclipsu a diky tomu nemusim
	 * vsude pouzivat fflush(stdout)
	 * pokud nekdo vite jak lepe opravit tuhle chybu
	 * budu jen rad
	 */
	setvbuf(stdout, NULL, _IONBF, 0);
	setvbuf(stderr, NULL, _IONBF, 0);
	


	int i,volba;
	//pole struktur OSOBA
	OSOBA postava[5];
	
	//vytvoreni jednotlivych postav
	for(i = 0; i < 5; i++){
		postava[i] = pridej_osobu();
		
	}


	//nekonecna smycka
	while(1){
		printf("Vyber osobu :\n");
		// pri zvoleni cisla pod kterou je nejaka postava
		// se vypisou udaje o ni
		//jinak se vypise hlaska ze "Takova postava neni"
		switch (volba){

			case 0 : tiskni_osobu(&postava[0]);
				     break;
			case 1 : tiskni_osobu(&postava[1]);
					 break;
			case 2 : tiskni_osobu(&postava[2]);
					 break;
			case 3 : tiskni_osobu(&postava[3]);
					 break;
			case 4 : tiskni_osobu(&postava[4]);
					 break;
			default :
				printf("Takova postava neni.");

		}
	}

	

		
	return 0;
}

/*
 * vytvori novou strukturu typu OSOBA
 * a vrati ji
 */
OSOBA pridej_osobu(){

	OSOBA pom;

	char pom_pole[25];
	int pom_vek,pom_vaha;
	
	//pouze staticka promena zvysujici se s kazdym volanim teto funkce
	static int cislo = 1;

	printf("Zadejte jmeno %d. osoby \n",cislo);
	fgets(pom_pole, 25,stdin);

	printf("Zadejte vek %d. osoby \n",cislo);
	scanf(" %d", &pom_vek);

	printf("Zadejte vahu %d. osoby \n",cislo);
	scanf(" %d", &pom_vaha);
	
	//prepise znak na konci pole z '\n' na '\0'
	pom_pole[strlen(pom_pole) - 2] = '\0';
	
	//ulozi do pom.jmeno obsah pole pom_pole
	strcpy(pom.jmeno, pom_pole);
	
	pom.vek = pom_vek;
	pom.vaha = pom_vaha;
	
	//inkrementuje lokalni statickou pormenou
	cislo++;

	return pom;
}

/*
 * vytiskne udaje o stukture OSOBA predane
 * v parametrus
 * 
 */
void tiskni_osobu(OSOBA *os){

	printf("Jmeno : %s\n", os->jmeno);
	printf("Vek : %d\n", os->vek);
	printf("Vaha : %d\n", os->vaha);

}

Nahlásit jako SPAM
IP: 81.201.60.–
Kit+15
Guru
4. 11. 2016   #2
-
0
-

#1 JokerTwo
To bude tím, že jednou používáš fgets() a podruhé scanf(). Mezitím ti unikají konce řádek, protože to nemáš ošetřeno.

BTW: K čemu tam máš ten switch?

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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, 126 hostů

Podobná vlákna

#define v printf? — založil Vilik

Printf a SDL — založil sin_x

Printf vs. cout — založil volnaduse

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ý