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

Objekt cin – C / C++ – Fórum – Programujte.comObjekt cin – C / C++ – Fórum – Programujte.com

 

q
~ Anonymní uživatel
219 příspěvků
4. 8. 2010   #1
-
0
-

Čtu knihu Mistrovství C++. V 6. kapitole, v části 'Cykly, které čtou čísla' je program, který vyzývá uživatele, aby zadával numerické údaje a v případě, že chce ukončit zadávání, zadal "q". Tyto vstupy čte pomocí cin >> fish[i] (fish je pole typu double). Kniha tvrdí, že pokud uživatel zadá slovo místo čísla, vstup se nechá ve vstupní frontě, nastaví se chybový příznak objetu cin a objekt při volání navrací false po konvertování na bool.
Zadávání probíhá tímto cyklem:

while (i < Max && cin >> fish[i]){

if (++i < Max)
cout << "ryba #" << (i+1) << ": ";
}

Takže, jestli jsem to správně pochopila, zadáním nenumerického vstupu by se měl ukončit cyklus a zbytek programu by se měl provést. Mně se ale program vždycky hned ukončí. Je to nastavením kompilátoru?

Nevím, jestli se mi to povedlo správně vysvětlit, proto kód celého programu:
//cinfish.cpp - nenumericky vstup ukoncuje cyklus

#include <iostream>
using namespace std;
const int Max = 5;
int main()
{
double fish[Max];
cout << "Prosim, zadejte cahy vasich ryb.\n";
cout << "Muzete zadat az " << Max
<< " ryb <q pro ukonceni>.\n";
cout << "ryba #1: ";
int i = 0;
while (i < Max && cin >> fish[i]){
if (++i < Max)
cout << "ryba #" << (i+1) << ": ";
}
double total = 0.0;
for (int j=0; j<i; j++)
total += fish[j];
if (i==0)
cout << "Zadna ryba\n";
else
cout << total/i << " = prumerna vaha "
<< i << " ryb\n";
cin.get();cin.get();
return 0;
}


...a ještě ukázka běhu programu uvedená v knize:
Prosim, zadejte vahy vasich ryb.

Muzete zadat az 5 ryb <q pro ukonceni>.
ryba #1: 30
ryba #2: 35
ryba #3: 25
ryba #4: 40
ryba #5: q
32,5 = prumerna vaha 4 ryb

Nahlásit jako SPAM
IP: 89.102.181.–
KIIV
~ Moderátor
+43
God of flame
4. 8. 2010   #2
-
0
-

spoustej z prikazove radky - vystup zustane v okne...

samozrejme to krachne na tom, ze se nastavi fail bit - NIC uz potom nemuze cokoliv nacist z cin (tj: cin.get();cin.get(); tez selze a na nic se neceka)

od toho je cin.clear() ci tak nejak

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
q
~ Anonymní uživatel
219 příspěvků
4. 8. 2010   #3
-
0
-

Děkuji za rychlou odpověď:)

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

Podobná vlákna

Cin.get() cin.line() — založil H3ll

Cin, cin.get(),...atď — založil PeterSura

Cin — založil crash969

Cin.get() — založil myth

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ý