Neprobehne mi znovu scanf – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Neprobehne mi znovu scanf – C / C++ – Fórum – Programujte.comNeprobehne mi znovu scanf – C / C++ – Fórum – Programujte.com

 

Lukas
~ Anonymní uživatel
301 příspěvků
17. 10. 2010   #1
-
0
-

Ahoj,
zacinam s Cckem a mam problem ohlednene nasledujicho kodu. Jedna se o program pro nacitani cisel, ktery vyhodnucuje minimalni a maximalni cislo ze zadanych a dale arit. prumer zadavanych cisel.



#include <stdio.h>
#include <conio.h>

int main(){
double pole[100]; /* pole celych cisel (maximalne 100) */
int i,a;
int pocet = 0;
float d,souc,max,min;
double cislo;

printf("**********PROGRAM NA HLEDANI MINIMA A MAXIMA VYPOCET d**********\n\n");
while(1){
souc = 0;

printf("Kolik cisel chtet zadat?\n(maximalne vsak %d):" , 100);
a = scanf("%d", &pocet);

if(a == 1){
printf("Vzdy zadejte cislo a nasledne stiknete enter.%d\n\n",pocet);
for(i=0; i<pocet; i++){
scanf("%lf",&pole[i]);
souc=souc+pole[i]; //nacitani cisel, pro pozdejsi vypocet prumeru
//printf("Bylo nacteno cislo %d\n",pole[i]);
}

printf("\n\n******Pole obsahuje prvky:******\n\n");
for(i=0; i<pocet; i++){
printf("Cislo c.[%d] je %.2f\n",i,pole[i]);
}
max=pole[0];
min=pole[0];

for(i=1; i<pocet; i++){
if (pole[i]>max){
max=pole[i];
}
if (pole[i]<min){
min=pole[i];
}
}
// Vypocet prumeru (nacitany pri zadavani)
d = souc/pocet;

printf("\n********************************\nMaximalni zadane cislo je: %.2f\n",max);
printf("Minimalni zadane cislo je: %.2f",min);
printf("\nAritmeticky prumer zadanych cisel je: %.2f",d);
}
else{
printf("\nZadal jsi spatne hodnotu.Zkus to znova!");
}


printf("\n********************************\nPro dalsi vypocet stikni mezernik(pro ukonceni,cokoli):\n\n");
//if (scanf("%lf",&cislo)==EOF)break;
if(getch()!=' ')break;
}
}


Problem spociva v radku:


printf("Kolik cisel chtet zadat?\n(maximalne vsak %d):" , 100);
a = scanf("%d", &pocet);


Pri behu progamu: pokud zadam spravne pocet cisel, tak vse probhne jak ma a pokud stisknu mezernik program se opakuje a vse o5 funguje. Bohuzel pokud zadam spatne pocet cisel (napisu treba nejaky text) , sice mi zafunguje podminka a vypise mi to, ze jsem zadal spatne at to zkusim znovu, ale bohuzel kdyz dam mezernik a chci znovu, tak uz mi nefuguje prave to scanf a nemuzu tam zadne cislo zadat.

Prosim nevite jak to opravit? Nemuzu na to vubec prijit.

Dekuji

Nahlásit jako SPAM
IP: 93.89.101.–
KIIV
~ Moderátor
+43
God of flame
17. 10. 2010   #2
-
0
-

nebude to tim, ze ty znaky zustanou ve vstupni fronte a pokazdy kdyz se snazis nacist dalsi cisla, tak to stejne ma na vstupu smeti, kteryho se nikdy nezbavis ?

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Lukas
~ Anonymní uživatel
301 příspěvků
17. 10. 2010   #3
-
0
-

Děkuji za rychlou odpověď
A jak prosím vyčistím tu vstupní frontu? Zkoušel jsem dát a = 0 před ten zmiňovaný scanf, ale to asi nic společného s frontou nemá... Nevím moc co ta fronta je.

Nahlásit jako SPAM
IP: 93.89.101.–
KIIV
~ Moderátor
+43
God of flame
17. 10. 2010   #4
-
0
-

To Lukas : no spis bych to videl na nacteni nejakeho retezce... nebo rovnou celeho radku
pokud neni nic validniho nacteno


nebo neco takoveho:

puts("Flushing input");
while ((ch = getchar()) != '\n' && ch != EOF);

ale pokud to udelas kdyz tam nic neni, tak se to nejspis zasekne..

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
sputnikone+1
Věrný člen
17. 10. 2010   #5
-
0
-

Nebude fungovat fflush(stdin) ?

EDIT: Ne, nebude (navíc to byla od začátku pěkná prasárna):smile17:

Nahlásit jako SPAM
IP: 94.112.91.–
Lukas
~ Anonymní uživatel
301 příspěvků
17. 10. 2010   #6
-
0
-

Dobře, děkuji.... jdu to dokončit.

Nahlásit jako SPAM
IP: 93.89.101.–
Lukas
~ Anonymní uživatel
301 příspěvků
17. 10. 2010   #7
-
0
-

Opravdu moc děkuji - funguje to. Ale přiznám se ... asi bych na to sám jen tak nepřišel :-)

Nahlásit jako SPAM
IP: 93.89.101.–
Lukas
~ Anonymní uživatel
301 příspěvků
17. 10. 2010   #8
-
0
-

sputnikone napsal:
Nebude fungovat fflush(stdin) ?

EDIT: Ne, nebude (navíc to byla od začátku pěkná prasárna):smile17:



no prasárna to je :-))) - věřím, že někdo by to napsal jen na polovinu řádků a ještě líp :-), ale tak třebas to časem až pokročím bude lepší :-)

Nahlásit jako SPAM
IP: 93.89.101.–
sputnikone+1
Věrný člen
17. 10. 2010   #9
-
0
-

To Lukas : Už jsem si vzpomněl: rewind(stdin) :smile1: Holt profesionál v Pythonu zapomněl na kořeny...

Nahlásit jako SPAM
IP: 94.112.91.–
m->29+6
Super člen
17. 10. 2010   #10
-
0
-

To sputnikone : Neviem či to robí to čo sa tu rieši.

Ja používam konštrukciu

scanf("%*s");

Nahlásit jako SPAM
IP: 83.208.112.–
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, 127 hostů

Podobná vlákna

Scanf - C — založil jakub

Scanf ve funkci — založil Rostislav

Scanf v C - segmentace — založil tap9701

C - scanf zacykleni — založil Remder

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ý