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

C - scanf zacykleni – C / C++ – Fórum – Programujte.comC - scanf zacykleni – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Remder0
Návštěvník
15. 11. 2011   #1
-
0
-

Dobrý den,

mám program, který postupně čte čísla,s každým provede výpočet a ten potom vytiskne.

 V podstatě můj kód vypadá takto:

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

int main()
{
  double x;
  int cteni;

  while((cteni = scanf("%lf", &x)) != EOF)
  {
    if (cteni == 0)
      x = 0.0/0.0; //NAN
    printf("%lf\n", x = x * x);
  }

  return 0;
}

Čtení tedy ukončuji EOF, a když nastane chyba při čtení čísla počítá se s hodnotou NAN.

Když zadávám korektní čísla, tak vše funguje, ale jakmile zadám písmeno tak se zacykli a vypisuje NAN.

Proč je program zacyklí? Když se nepodaří přečíst číslo, cteni by se mělo rovnat 0, vytisknout se jednou NAN a poté číst další číslo, ale tak to zjevně není když to nefunguje.

Předem děkuji za odpověď.

Nahlásit jako SPAM
IP: 85.93.124.–
KIIV
~ Moderátor
+43
God of flame
15. 11. 2011   #2
-
0
-

zaprve scanf nevraci nikdy EOF... vraci pocet uspesne nactenych parametru (kdyz nic nenacte -> 0 ne EOF (coz je tusim neco jako -1)

a protoze nic nenacte tak se nezmeni promenna,

spatny data zustanou na standardnim vstupu,

a pak se vlastne pokusis o dalsi rundu -> zase spatny data, zadnej eof, zustane to na vstupu..........

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Remder0
Návštěvník
15. 11. 2011   #3
-
0
-

#2 KIIV

zaprve scanf nevraci nikdy EOF... vraci pocet uspesne nactenych parametru (kdyz nic nenacte -> 0 ne EOF (coz je tusim neco jako -1)

Zkousel jsem to a kdyz scanf nacte EOF, tak vrati hodnotu -1 (coz je EOF).

K tomu ostatnímu, při použití fflush(stdin); uz vse funguje jak ma. Diky

Nahlásit jako SPAM
IP: 85.93.124.–
KIIV
~ Moderátor
+43
God of flame
15. 11. 2011   #4
-
0
-

#3 Remder
ok budiz - hlavni je se zbavit toho smeti... :)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Remder0
Návštěvník
15. 11. 2011   #5
-
0
-

Tak fflush(stdin) neni nejstastnejsi, při hodnotach "1 2 3 50 60 \ENTER" zpracuje 1 a ostatni zahodi. Coz je pochopitele, kdyz fflush(stdin) vyprazdni buffer a pri cteni se nejdriv nactou data do bufferu a az pote se snimi pracuje.

Jak jinak je mozne se zbavit "smeti"?

Nahlásit jako SPAM
IP: 85.93.124.–
zlz
~ Anonymní uživatel
634 příspěvků
15. 11. 2011   #6
-
0
-

Tak to "smetí" vyhazuj až když tam bude a dej to do toho ifu, neasi!

Pak je otázka, co je to smetí, tady by se hodilo "slovo", takže místo fflush(stdin) třeba scanf("%*s").

Jinak jsou různé opravy vstupu celkem na nic a nejlepší je prostě zařvat a skončit.

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

Podobná vlákna

Zacyklení — založil kotilion

Scanf - C — založil jakub

Scanf ve funkci — založil Rostislav

Scanf v C - segmentace — založil tap9701

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ý