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

CHAR pole + cykly – C / C++ – Fórum – Programujte.comCHAR pole + cykly – C / C++ – Fórum – Programujte.com

 

Jeyekomon0
Stálý člen
28. 11. 2007   #1
-
0
-

Zdravim, nevim, jeslit je to dobre, nebo spatne, ale kdykoliv sednu na delsi dobu k C++, tak narazim na novy problem, pres nez se nemuzu dostat.. A vetsinou jsou to veci ze zacatku programovani :(
(Jak se pak ma clovek dostat na vyssi uroven..)

Tentokrat jsem mel nasledujici program:



#include <iostream>
using namespace std;
int main()
{
const int VEL = 50;
char jmeno[VEL];
int count = 0;

for(int i=0; i<VEL; i++)
{
jmeno[i] = ' ';
}

cout <<"Zadej sve jmeno: ";
cin.get(jmeno, VEL);

cout <<"Jmeno bylo ulozeno. ";

for(int k=0; k<VEL; k++)
{
while(jmeno[k] == ' ')
{
count = count + 1;
}
}

for(int j = VEL - 1 - count; j>=0; j--)
{
cout <<jmeno[j];
}

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



Tohle mi proste nechce jet.
Snazil sem se osetrit vsechny moznosti, kde by mohly byt chyby, ale asi neumim pouzivat cyklus while..

Dokonce jsem to uz nahradil necim, co opravdu jede, tedy



for(int k=0; k<VEL; k++)
{
while(jmeno[k] == ' ')
{
count = count + 1;
}
}


jsem nahradil za



for(int k = VEL - 1; k>=0; k--)
{
if(jmeno[k] == ' ')
{
count = count + 1;
}
else
{
break;
}
}


a ten uz pak jede, jen by me zajimalo, kde jsem delal logickou chybu, abych se taky trochu poucil ze svych chyb..
(Doufam, ze je poznat, k cemu mel program slouzit..)
Dik.

Nahlásit jako SPAM
IP: 195.113.31.–
jjk
Jeyekomon0
Stálý člen
28. 11. 2007   #2
-
0
-

To Jeyekomon :
Omlouvam se, nezkontroloval jsem si po sobe prispevek.
KOpiroval jsem to vsechno ze starsi verze.
Program s tim "while" ma samozrejme mit stejny tvar, jako s tim "if" :



for(int k = VEL - 1; k>=0; k--)
{
while(jmeno[k] == ' ')
{
count = count + 1;
}
}


Aby pocital mezery od konce ..

Nahlásit jako SPAM
IP: 195.113.31.–
jjk
tmi0
Věrný člen
28. 11. 2007   #3
-
0
-

problem je ze se ti problem nekonecne zacykli. kdyz napises while(jmeno[k]== ' '){count++;} tak se podiva na k-ty prvek pole jmeno, a pokud je mezera zvysi promennou count o jedna. a potom udela to same. a znovu. a znovu. a jeste jednou. a tak dal, a porad zkouma ten samy prvek pole jmeno, protoze nijak nemenis promennou k. resenich je nekolik, bud to cele napsat jako while a v kazdem kroku k zmensit o jedna, tedy:
k=VEL-1;
while (jmeno[k--]==' '){count++;}

nebo tam nechat tu variantu s if.
a nebo jeste lepe, pouzit funkci int strlen(const char*) z <cstring>, ktera ti vrati delku textoveho retezce)... a to pole na zacatku taky nulovat (plnit mezerama) nemusis, protoze nacteni automaticky za retezec pripoji znak '\0' ktery slouzi jako indentifikace konce retezce, napriklad pro zmineny strlen. ale muzes to podobnym cyklem kontrolovat i sam.

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

To tmi :
Ty mezery jsem tam mel jen proto, ze po zapisu se vsechny dulezite znaky prepisou z mezer na neco jineho.
Predtim tam jsou nejake divne znaky, proto jsem je nemohl nijak testovat v te sve podmince.
Mno, proste se asi poustim do velikych veci bez potrebneho arzenalu.

!! Ale jednu vec nechapu, a to, jaktoze, kdyz se meni ta promenna "k" v celem cyklu for, proc se nemeni i ve while, kdyz je soucasti toho cyklu?? To je pro me novinka..
Jeste jsem to nezkousel, ale zajimalo by me treba, co bude na vystupu tohoto:



for(int i=1; i<10; i++)
{
while(5>3)
{
cout <<i;
}
}

(Pokud to vubec pojede)
Jestli to bude taky nejaka pocatecni hodnota, jako uvnitr podminky while (treba 111111111), nebo se to normalne vypise jako 123456789 .
K moji spokojenosti by tedy asi stacilo vysvetlit to (pro me anomalii :) ) s tim for cyklem ..
Diky za trpelivost..

Nahlásit jako SPAM
IP: 195.113.65.–
jjk
Jeyekomon0
Stálý člen
28. 11. 2007   #5
-
0
-

To tmi :
Jej.. :smile4:
Prave jsem si uvedomil moji chybu.. Nevim, proc, ale porad jsem mel dojem, ze cyklus while otestuje podminku a pokud je pravdiva, pak provede prikazy uvnitr, pokud ne, pak je preskoci a v obou pripadech SKONCI. Proto jsem to pak analogicky vyresil s "if" . Ten se totiz tak chova.
Diky za pomoc a omlouvam se za celkem zbytecne vlakno..

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

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ý