Chyba v jednoduchém programu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Chyba v jednoduchém programu – C / C++ – Fórum – Programujte.comChyba v jednoduchém programu – C / C++ – Fórum – Programujte.com

 

tulk
~ Anonymní uživatel
21 příspěvků
20. 4. 2010   #1
-
0
-

Zdravim, učím se c++ a zkoušel jsem takovej jednoduchej program a nevim kde je chyba :(

#include <iostream>

int main()
{
using namespace std;
const int Delka = 20;
char spravneHeslo[Delka] = "heslo";
char zadaneHeslo[Delka];
cout << "Zadejte prosim heslo: ";
do
{
cin >> zadaneHeslo;
} while (zadaneHeslo != spravneHeslo);


cout << "Vitejte v systemu :) ";
cin.get();
cin.get();
return 0;

}


myslel jsem, že dokaď uživatel nezadá správné heslo, tak se přes tu podmínku nedostane, ale prostě to nefunguje, neporadil by někdo kde je chyba pls? diky

Nahlásit jako SPAM
IP: 81.19.46.–
Bald3rr0
Super člen
20. 4. 2010   #2
-
0
-
Nahlásit jako SPAM
IP: 82.100.0.–
LJ10240
Stálý člen
21. 4. 2010   #3
-
0
-

while(strcmp(zadaneHeslo, spravneHeslo) != 0) //int funkce

Nahlásit jako SPAM
IP: 217.30.64.–
yaqwsx+9
Posthunter
21. 4. 2010   #4
-
0
-

To tulk : Jelikož začínáš, navíc píšeš, že začínáš v C++, tak používej STL - tzn. pro řetězce třídu string. Zpočátku ti to ušetří spoustu trápení. A později, až budeš potřebovat low-level prvky, je snáz pochopíš.

Nahlásit jako SPAM
IP: 85.160.69.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
tulk
~ Anonymní uživatel
21 příspěvků
21. 4. 2010   #5
-
0
-

jj, díky moc, problém je vyřešenej :) jdu číst dál, až nastane problém, tak se zase ozvu :)

Nahlásit jako SPAM
IP: 81.19.46.–
tulk
~ Anonymní uživatel
21 příspěvků
21. 4. 2010   #6
-
0
-

Tak a je tu další problém a já fakt netuším, už jsem u toho chvíli strávil :(
Zadání:
Napište program, který požádá uživatele o vstup dvou celých čísel. Program by potom měl vypočítat součet celých čísel mezi těmito čísly včetně a oznámit výsledek. Prozatím předpokládejme, že bude menší celé číslo zadáno jako první. Když uživatel zadá například 2 a 9, program oznámí, že součet všech celých čísel mezi 2 a 9 je 44.

Můj pokus:

#include <iostream>

int main()
{
using namespace std;
int x,y;
cout << "Zadejte cislo: ";
cin >> x;
cout << "Zadejte druhe cislo: ";
cin >> y;
int i;
int soucet;
for (i = x; i <=y; i++)
{

soucet = x + i;

}
cout << soucet;

cin.get();
cin.get();
return 0;
}


Myslím, že ti co tomu rozumí kouknou a vědí, kde je chyba. Myslel jsem, že i nastavím na tu menší hodnotu, pak testuji jestli je i menší nebo rovno tomu většímu. Pak zvětšuji i o 1. Pak jsem chtěl průběžne přičítat a až dojde k tomu, že i = y, podmínka selže a vypíše se výsledek. Ve finále ovšem můj program funguje tak, že se zadaná čísla sečtou a hotovo :(

Nahlásit jako SPAM
IP: 81.19.46.–
yetty_001
~ Redaktor
+5
Super člen
21. 4. 2010   #7
-
0
-

chyba je v součtu: soucet = x + i;
Když se nad tím zamyslíš, tak ti to dojde. Ty nesmíš přičítat k prvnímu číslu, ale k samotnému součtu. Takže si musíš na začátku součet stanovit na 0 a pak k němu přičítat i.

Nahlásit jako SPAM
IP: 94.74.221.–
tulk
~ Anonymní uživatel
21 příspěvků
21. 4. 2010   #8
-
0
-

jj, díky moc, už je to funkčí, to s tím přičítáním pouze i jsem samozřejmě zkoušel, největší chyba byla v tom, že jsem si proměnnou soucet nenastavil na 0. Nevěděl jsem, že to může mít takový vliv na program. Chybama se člověk učí, díky.

Nahlásit jako SPAM
IP: 81.19.46.–
Bald3rr0
Super člen
21. 4. 2010   #9
-
0
-

To tulk : Zrovna na tomto příkladě se ukazuje, že matematické znalosti jsou k nezaplacení. Vezmi si například, že by někdo zadal čísla 1 a 30 000. Tvůj program by to projel 30 001x, kdežto k tomu stačí jednoduchý výpočet na součet aritmetické posloupnosti. Chápu, že tady se jedná spíše o procvičení cyklů, ale jen jako taková rada do budoucna ;)

Nahlásit jako SPAM
IP: 82.100.0.–
tulk
~ Anonymní uživatel
21 příspěvků
29. 4. 2010   #10
-
0
-

takže je tu další program:
Napište program, který čte vstupní data z klávesnice až po symbol @, zobrazuje vstupní data kromě číslic a konvertuje malé znaky na velké a naopak. (Nezapomeňte na knihovnu cctype.)

Nějak jsem na tom krachnul úplně. to ukončení vstupu @ mně taky nějak nejde, chápu že to musí bejt třeba přes while, ale ať to zkouším jak to zkouším, tak to prostě nefunguje :( ten zbytek netuším už vůbec, třeba tu změnu velikosti písma :( nepomohl by někdo nějak pls?

Nahlásit jako SPAM
IP: 81.19.46.–
tulk
~ Anonymní uživatel
21 příspěvků
29. 4. 2010   #11
-
0
-

takže už mám alespoň program pro načítání znaků:
#include <iostream>
int main()
{
using namespace std;
char ch;
cout << "Zadejte znaky, pro ukonceni vstupu zadejte @:\n";
cin.get(ch);
while(ch != '@')
{
cout << ch;
cin.get(ch);
}

cout << "\nKONEC!";
cin.get();
cin.get();
return 0;
}

Problém je v tom,že pokud zadám třeba: Veku je hezké počasí @ nebude prset. tak bych cekal ze se uzná je první část, ale s tímhle vstupem se mně zavře celá konzole :(

Nahlásit jako SPAM
IP: 81.19.46.–
liborb
~ Redaktor
+18
Guru
29. 4. 2010   #12
-
0
-

Lepší je použít do-while. Uzavře se ti to, protože máš pořád dost nezpracovaných znaků na vstupu. V cyklu už ti stačí pouze detekce isdigit apod. a případná úprava znaků.

Nahlásit jako SPAM
IP: 91.203.96.–
tulk
~ Anonymní uživatel
21 příspěvků
2. 5. 2010   #13
-
0
-

takže mám problém, a řekl bych, že je úplně stejný jako v první příspěvku zde, ale nemůžu to vyřešit :(
mám toto:

char volba;
to toho chci uložit pouze 1 znak "a" nebo "n"
přes cin chci tento znak získat
cin >> volba;

a potom jen v programu porovnat :)
while(strcmp(volba, "a") == 0);


ovšem píše to toto:
strcmp' : cannot convert parameter 1 from 'std::string' to 'const char *'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Nahlásit jako SPAM
IP: 81.19.46.–
Bald3rr0
Super člen
2. 5. 2010   #14
-
0
-

To tulk : jeden znak je číslo v rozmezí 0 - 255, takže pro porovnání můžeš použít ==

while(volba == 'a');

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

Podobná vlákna

Chyba v programu — založil vasek.t

Chyba v programu — založil

Chyba v programu — založil choice_

Chyba programu — založil bbeni

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ý