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

Kde je chyba? – C / C++ – Fórum – Programujte.comKde je chyba? – C / C++ – Fórum – Programujte.com

 

Tom@sQo0
Stálý člen
25. 10. 2007   #1
-
0
-

ahoj,
pls povedzte mi, ze aky je rozdiel medzi tymito programami okrem toho, ze program pouzivajuci iostream mi v pohode funguje so vstupom zo suboru a program vyuzivajuci cstdio neviem preco, ale nejde... KDE je problem? diky :)



#include <iostream>
using namespace std;
int main(){

int cislo, najvacsie;
najvacsie = 0;
while(cin >> cislo)
if(cislo > najvacsie)
najvacsie = cislo;
cout << "najvacsie "<< najvacsie << endl;
return 0;
}

#include <cstdio>
using namespace std;
int main(){

int cislo, najvacsie;
najvacsie = 0;
while(scanf("%d", &cislo)) // scanf - adresa - int *
if(cislo > najvacsie)
najvacsie = cislo;
printf("najvacsie %d\n", najvacsie); // hodnota
return 0;
}











Nahlásit jako SPAM
IP: 88.212.23.–
Tom@sQo
Tom9k0
Newbie
25. 10. 2007   #2
-
0
-

Nevim jestli jsem to dobre pochopil,ale cyklus while by mel byt ohranicen slozenymi zavorkami,takze,jestli chces aby se ti vzdy po zadani nejakeho cisla zobrazilo nejvetsi zadane cislo,tak by mel kod vypadat takhle:

#include <cstdio>

using namespace std;
int main(){
int cislo, najvacsie;
najvacsie = 0;
while(scanf("%d", &cislo)){ // scanf - adresa - int *
if(cislo > najvacsie)
najvacsie = cislo;
printf("najvacsie %d\n", najvacsie);} // hodnota
return 0;
}

a ty dva priklady co jsi uvedl by mely fungovat uplne stejne.Jeste bych dodal,ze radka "using namespace std;" je v tomto pripade zbytecna.

Nahlásit jako SPAM
IP: 89.203.136.–
tmi0
Věrný člen
25. 10. 2007   #3
-
0
-

To Tom@sQo :
a jak presne "nejde"? vzal jsem oba zdrojove kody, presne jsem je zkopiroval a zkompiloval a fungovaly bez problemu (uplne stejne). oba brali vstup z konzole, po preruseni (ctrl-D) vypsaly nejvetsi cislo a skoncily.
poznamka: pro funkce z knihovny cstdio nemusis pouzivat using namespace std;
poznamka2 (to Tom9k): ty slozene zavorky tam byt nemusi, protoze while (i dalsi podopne) vezme to co je hned za nim: tedy bud blok ohraniceny slozenymi zavorkami, nebo jeden prikaz: v tomto pripade if. a if zase vezme prikaz najvacsie=cislo.

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Tom@sQo0
Stálý člen
25. 10. 2007   #4
-
0
-

tmi: viem, ze nemusim urcit menny priestor :), ja som ten priklad prerabal z pouzitia iostream na cstdio, nakolko zatial, co som ja programoval, smo nikdy nepotreboval pouzivat stdio, ale nakolko v tych sutaziach ide velmi o rychlost, tak som chcel vyskusat jeho pouzitie ;) tym som v podstate chcel povedat, ze som ho len zabudol odstranit, ale o to nejde ;)


mnoo v tych pripadoch ide o to, ze davaju ocakavany vystup, pokial vstup pises interaktivne, lenze ked zadas nejaky vstup do suboru, napr.

10000

274454
360699
250769
392865
266336
195269
3573
185610
231790
69590


a spustit ten druhy priklad napr.:


g++ -Wall std*
./a.out <input

tak sa mi zobrazi len jeden prazdny riadok a ziaden vystup...

Nahlásit jako SPAM
IP: 88.212.23.–
Tom@sQo
Tom@sQo0
Stálý člen
25. 10. 2007   #5
-
0
-

neviem preco, ale mam ten blby pocit(nemusi to byt pravda), ze treba v stdio nejak testovat, ci sme dosli k EOF ... neviete niekto ako?

Nahlásit jako SPAM
IP: 88.212.23.–
Tom@sQo
tmi0
Věrný člen
25. 10. 2007   #6
-
0
-

to by mel byt ten problem, EOF ma byt definovana jako libovolna zaporna hodnota. to znamena za by melo stacit zadat while(scanf("%d",&cislo) > 0)
mohl bys to udelat i jako while(scanf("%d",&cislo)!=EOF), ale to horni reseni je obecnejsi. funkce scanf totiz vraci pocet uspesne prectenych polozek, tedy v pripade zadani pismena vrati 0 a program by se zacyklil.... man scanf rulez:)

... a scanf by skutecne mel byt rychlejsi, protoze to neni objekt. ale prace s cin je obecnejsi, nemusis resit format vstupu... u scanf tak nejak predpokladas ze kdyz mas scanf(%d) tak ze ti tam uzivatel nenarve 3.4... ovsem i kdybys pouzil cin tak ten problem nevyresis vzdy, tady by stacilo pretypovat, ale kdyby zadal pismenka tak stejne musis hlasit chybu... takze preferuji scanf

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Tom@sQo0
Stálý člen
28. 10. 2007   #7
-
0
-

jj, tu bola ta chyba ;) thx, problem vyrieseny ;)

Nahlásit jako SPAM
IP: 88.212.23.–
Tom@sQo
tmi0
Věrný člen
28. 10. 2007   #8
-
0
-

neni zac.

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
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, 47 hostů

Podobná vlákna

Kde je chyba ? — založil sipeer

Kde ej chyba? — založil Tom@sQo

C# kde je chyba ? — založil Milan

Kde je chyba? — založil VelkyBubak

Kde je chyba??? — založil Mau

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ý