Názory ke článku C++ - 4. lekce
26. 9. 2005
když používám fci cin.getline() a zadám bvětší počet znaků, než je definováno. Ukončí se průběh programu .... To je normální?
22. 11. 2005
V úkolu 4. lekce C++ je bod, jenž říká, aby program vypsal jméno pozpátku.
Pokud však napíšu kratší jméno, než je definováno u cin.getline(), vypíše mi program nejdříve několik nesmyslných znaků a teprve po nich následuje jméno pozpátku. Dá se tomu nějak předejít?
Děkuji, nicméně chyba byla uz v zadání proměnné
char prom[tady byla chybička]; =)
... Kdyz zadam do include cstring nebo string.h tak mi kompilator Dev-C++ hazi chybu, ze je funkce cout nedeklarovana (pouzil jsem cout << "Blabla")
Nevite co s tim ? Diky predem.
me to dela to same, poradte nekdo ... kod :
--- kod ---
#incule <cstring>
using namespace std;
int main()
{
char jmeno[]="jirka";
cout << "Vase jmeno ma " << strlen(jmeno) << " znaku";
cin.get();
cin.get();
return 0;
}
--- kod ---
OPRAVA (porad to nejede a pise to chybu na zadku s cout)
--- kod ---
#include <cstring> //vyskousel jsem i string.h
using namespace std;
int main()
{
char jmeno[]="jirka";
cout << "Vase jmeno ma " << strlen(jmeno) << " znaku";
cin.get();
cin.get();
return 0;
}
--- kod ---
Se nedivte,m ze vam to pise chybu, kdyz cout je soucasti ostream.. (iostream)
Staci pridat : #include <iostream>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
char jmeno[]="jirka";
cout << "Vase jmeno ma " << strlen(jmeno) << " znaku";
cin.get();
cin.get();
return 0;
}
30. 1. 2006
Taky jsem na to narazil - dela to cin.get - pamatuje si porad zmacknuty enter takze program dojede na konec programu vetsinou tak rychle ze to ani nezaregistrujes, kdyz si za to hodis cyklus a zacyklis ho tak uvidis. Mam ale stejnej problem nezrusi to ani cin.clear(); Co s tim? Jak ohlidat preteceni pole znaku?
Curo pozri sa prosím ťa na toto. Úplne na konci keď mi už vypisuje to meno tak tam za to meno odzadu vypíše čudné znaky a neviem ako to dať preč.
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
//špeciálne znaky
char ee=130;
char ss=231;
char je=216;
char ii=161;
char aa=160;
char cc=159;
//meno a vek
char meno[30];
cout << "Va" << ss << "e jm" << ee << "no pros"<< ii << "m : ";
cin >> meno;
int vek;
cout << "V" << aa << ss << " v" << je << "k pros" << ii << "m : ";
cin >> vek;
//zadanie čísiel do poľa
int pole[5];
int i;
cout << endl;
for (i=0; i<5; i++) //1.řádek
{
cout << "Zadej " << i+1 << ". " << cc << ii << "slo pros" << ii << "m : ";
cin >> pole[i];
}
//výpis výsledku
cout << endl;
int vysledok=0;
for (i=0; i<5; i++)
{
cout << pole[i];
if (i != 4) cout << "+";
else cout << "=";
vysledok = vysledok + pole[i];
}
cout << vysledok << endl;
//výpis mena odzadu
int j=0;
char menoodzadu[strlen(meno)];
for (i=strlen(meno); i>0; i--)
{
menoodzadu[j] = meno[i-1];
j++;
}
cout << "\nVa" << ss << "e jm" << ee << "no je : " << meno << endl;
cout << "Pozp" << aa << "tku je to : " << menoodzadu;
cin.get();
cin.get();
return 0;
}
text:
jediný rozdíl mezi cin.getline(); a cin.get(); je, že cin.get(); zanechává znak nového řádku ve vstupní frontě.
cin<b>,</b>get(jmeno, 20);
cin<b>,</b>get(jmeno2, 20); // problém
má byť:
jediný rozdíl mezi cin.getline(); a cin.get(); je, že cin.get(); zanechává znak nového řádku ve vstupní frontě.
cin<b>.</b>get(jmeno, 20);
cin<b>.</b>get(jmeno2, 20); // problém
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char ee=130;
char ss=231;
char je=216;
char ii=161;
char aa=160;
char cc=159;
//jmeno
char jmeno[30];
cout << "Va" << ss << "e jm" << ee << "no pros"<< ii << "m : ";
cin >> jmeno;
cin.get ();
//vek
int vek;
cout << "V" << aa << ss << " v" << je << "k pls: ";
cin >> vek;
cin.get ();
//otazani na cisla
int cislo[5];
int i;
cout << endl;
for (i=0; i<5; i++)
{
cout << "Zadej " << i+1 << ". " << cc << ii << "slo pros" << ii << "m : ";
cin >> cislo[i];
}
//ukazani souctu
cout << endl;
int vysledek=0;
for (i=0; i<5; i++);
cout << cislo[0] << "+" << cislo[1] << "+" << cislo[2] << "+" << cislo[3] << "+" << cislo[4] << "=" << cislo[0] + cislo[1] + cislo[2] + cislo[3] + cislo[4];
cin.get ();
//jmeno pozadu
int j=0;
char jmenoodzadu[strlen(jmeno)];
for (i=strlen(jmeno); i>0; i--)
{
jmenoodzadu[j] = jmeno[i-1];
j++;
}
cout << "\nVa" << ss << "e jm" << ee << "no : " << jmeno << endl;
cout << "Pozp" << aa << "tku : " << jmenoodzadu;
cin.get();
cin.get();
return 0;
}
na konec (jmeno pozpatku) mi to "vyflusne" nejaky znaky... nejak to nechapu :(
pls help
Takže ti to vyflusne jméno pozpátku plus nějaký znaky... ?
Problém je v tom, že v řetěci jmenoodzadu ti na konci chybí znak '\0', který říká funkci cout, že je konec proudu. Myslim:)
baryman napsal: me to dela to same, poradte nekdo ... kod : #
##
#--- kod ---#
##
##incule <cstring>#
##
#using namespace std;#
##
#int main()#
##
#{#
##
# char jmeno[]="jirka";#
##
# cout << "Vase jmeno ma " << strlen(jmeno) << " znaku";#
##
# cin.get();#
##
# cin.get();#
##
# return 0;#
##
#}#
##
#--- kod ---
Curo napsal:
baryman napsal: me to dela to same, poradte nekdo ... kod : #
##
#--- kod ---#
##
##incule <cstring>#
##
#using namespace std;#
##
#int main()#
##
#{#
##
# char jmeno[]="jirka";#
##
# cout << "Vase jmeno ma " << strlen(jmeno) << " znaku";#
##
# cin.get();#
##
# cin.get();#
##
# return 0;#
##
#}#
##
#--- kod ---
dsfsdfsd
skus si pomoct z minulej lekcie, kedy si mal vypisat prve pismeno mena, a potom prve a druhe.
Tak skus to iste napisat opačne.
4. 12. 2006
Já to vyřešil takhle:
int i;
for (i=strlen(jmeno); i>=0; i--)
{
cout << jmeno[i];
}
Prosím poraďte,
všechno mi jde vpořádku, ale součet čísel neodpovídá pravdě. Např. při zadání 11111 = 245. ?
čuz, tohle mi funguje, ale moc jsem to upravovat nemusel .)
char year[5];
cout << "\n\nV kterem roce byl vas dum postaven?\n";
cin >> year;
cin.clear();
cin.get();
cout << "Jaka je jeho adresa?\n";
char address[80];
cin.getline(address, 80);
cout << "Rok vystavby: " << year << "\n";
cout << "Adresa: " << address << "\n";
cout << "Konec!\n";
3. 1. 2007
to vypsání jsem rozlousk vpoho ale ty čísla mě zadrhly, asi jsem něco zapoměl, ale prošel jsem si poznámky a nic jsem nenašel.
udelal jsem asi tři řešení a vždy to píše po zadání pěti jedniček součet 106
cout << "\nSou" << ch << "et t" << eh << "chto " << ch << ic << "sel je:";
int soucet;
int a = cisla[0];
int b = cisla[1];
int c = cisla[2];
int d = cisla[3];
soucet = a+b+c+d;
cout << soucet << "\n";
Mě to zase píše po zadání pěti jedniček součet 245, už si nevím rady co s tím:
cout << "Soucet cisel je: ";
delka=strlen(cisla);
cout << cisla[0] + cisla[1] + cisla[2] + cisla[3] + cisla[4] << "\n\n";
18. 4. 2007
hele, řeknu ti jednu věc kde máš podle mě chybu ... :) "delka=strlen(cisla);" ... zkus ty čísla z uživatele dostat pomocí cyklu ... např for... :) zaručeně se ti to povede...;)
//cisla
cout << "\nProsim vloz pet cisel\n";
for (koef = 0; koef < 5; koef++)
{
cin >> cislo[koef];
};
//soucet cisel
cout << cislo[0] + cislo[1] + cislo[2] + cislo[3] + cislo[4] << "\n";
for (i=strlen(meno); i>0; i--)
{
menoodzadu[j] = meno[i-1];
j++;
}
tento cyklus zkopíruje do menoodzadu znaky toho jména, ale zastaví se na posledním písmenu a nezkopíruje nulový bit - tj konec řetězce (ten potřebuje cout, aby věděl, kdy má skončit - a aby netisk ty paznaky)
takže:
for (i=strlen(meno); i-1>0; i--)
{
menoodzadu[j] = meno[i-1];
j++;
}
by myslím mohlo fungovat, ale jistě to nevím, nemám to kde vyzkoušet, píšu to z hlavy :-)
pardon, blbnu :-) má to být
for (i=strlen(meno); i>-1; i--)
{
menoodzadu[j] = meno[i-1];
j++;
}
hodnota znaku 1 = 49. Nesmíš ty jedničky sčítat jako char. Takže při deklaraci tu proměnnou nenastavuj jako char cisla[5], ale int cisla[5]
doufám že to pomůže
#include <iostream>
/*#include <cstring> ... ide to aj bez zahrnutia knihovni csting ;)*/
using namespace std;
int main()
{
char ee=130;
char ss=231;
char je=216;
char ii=161;
char aa=160;
char cc=159;
//jmeno
char jmeno[30];
cout << "Va" << ss << "e jm" << ee << "no pros"<< ii << "m : ";
cin >> jmeno; /*1. pripomienka, funguje len pri zadani mena bez priezviska!(pri zadani retazca bez prazdnych znakov, medzier)*/
cin.get ();
//vek
int vek;
cout << "V" << aa << ss << " v" << je << "k pls: ";
cin >> vek;
cin.get ();
//otazani na cisla
int cislo[5];
int i;
cout << endl;
for (i=0; i<5; i++)
{
cout << "Zadej " << i+1 << ". " << cc << ii << "slo pros" << ii << "m : ";
cin >> cislo[i]; /*1. chyba, namiesto 'cin>>cislo;' tam treba mat 'cin>>cislo[i];'*/
}
//ukazani souctu
cout << endl;
int vysledek=0; /*2. pripomienka, zbytocna deklaracia, kedze si premennu vysledok nikde inde nepouzil*/
for (i=0; i<5; i++);/*3. pripomienka, tento cyklus tu ma aky zmysel?*/
[i]cout << cislo[0] << "+" << cislo[1] << "+" << cislo[2] << "+" << cislo[3] << "+" << cislo[4] << "=" << cislo[0] + cislo[1] + cislo[2] + cislo[3] + cislo[4];[/i]
/*Vypis cisel a ich scitanie je pridlhy! Radsej to ries pomocou cyklov:
for(int i=0;i<4;i++)
cout<<cislo[i]<<"+";
cout<<cislo[5]<<"=";
for(int i=0;i<5;i++)
vysledok+=cislo[i]; //pouzitie premennej vysledok
cout<<vysledok;
*/
cin.get ();
//jmeno pozadu
int j=0;
char jmenoodzadu[strlen(jmeno)];
cout<<endl;
for (i=strlen(jmeno); i>0; i--)
{
jmenoodzadu[j] = jmeno[i-1];
j++;
}
jmenoodzadu[j]='\0';
cout << "\nVa" << ss << "e jm" << ee << "no : " << jmeno << endl;
cout << "Pozp" << aa << "tku : " << jmenoodzadu;
cin.get();
cin.get();
return 0;
}
#include <iostream>
/*#include <cstring> ... ide to aj bez zahrnutia knihovni csting ;)*/
using namespace std;
int main()
{
char ee=130;
char ss=231;
char je=216;
char ii=161;
char aa=160;
char cc=159;
//jmeno
char jmeno[30];
cout << "Va" << ss << "e jm" << ee << "no pros"<< ii << "m : ";
cin >> jmeno; /*1. pripomienka, funguje len pri zadani mena bez priezviska!(pri zadani retazca bez prazdnych znakov, medzier)*/
cin.get ();
//vek
int vek;
cout << "V" << aa << ss << " v" << je << "k pls: ";
cin >> vek;
cin.get ();
//otazani na cisla
int cislo[5];
int i;
cout << endl;
for (i=0; i<5; i++)
{
cout << "Zadej " << i+1 << ". " << cc << ii << "slo pros" << ii << "m : ";
cin >> cislo[ i ]; /*1. chyba, namiesto 'cin>>cislo;' tam treba mat 'cin>>cislo[ i ];'*/
}
//ukazani souctu
cout << endl;
int vysledek=0; /*2. pripomienka, zbytocna deklaracia, kedze si premennu vysledok nikde inde nepouzil*/
for (i=0; i<5; i++);/*3. pripomienka, tento cyklus tu ma aky zmysel?*/
[i]cout << cislo[0] << "+" << cislo[1] << "+" << cislo[2] << "+" << cislo[3] << "+" << cislo[4] << "=" << cislo[0] + cislo[1] + cislo[2] + cislo[3] + cislo[4];[/i]
/*Vypis cisel a ich scitanie je pridlhy! Radsej to ries pomocou cyklov:
for(int i=0;i<4;i++)
cout<<cislo[i]<<"+";
cout<<cislo[5]<<"=";
for(int i=0;i<5;i++)
vysledok+=cislo[i]; //pouzitie premennej vysledok
cout<<vysledok;
*/
cin.get ();
//jmeno pozadu
int j=0;
char jmenoodzadu[strlen(jmeno)];
cout<<endl;
for (i=strlen(jmeno); i>0; i--)
{
jmenoodzadu[j] = jmeno[i-1];
j++;
}
jmenoodzadu[j]='\0';
cout << "\nVa" << ss << "e jm" << ee << "no : " << jmeno << endl;
cout << "Pozp" << aa << "tku : " << jmenoodzadu;
cin.get();
cin.get();
return 0;
}
Je tam zopár chýb spôsobených obľúbenosťou premennej 'i' , ktora zmizne pri písaní komentárov s hranatými zátvorkami.
A tiež sa mi to podarilo odoslať 2x. :)
19. 9. 2007
znaky odreze cin.clear(); // zmeni chybovy stav na dobry
a za clear este cin.ingore(1000.'\n'); //ingoruje znaky
2. 10. 2007
Dobry den, jak zjistim aktualni velikost pole , tzn. kolik prvku zrovna obsahuje? Najekou instrukci? V pascalu to myslim bylo velikost:=High(pole);
dekuji
8. 10. 2007
hmmm...ja to nechapu kdyz neuvidim priklad a tady sou vsechny priklady spatne
21. 10. 2007
Zdravim... je v C++ pripustne neco takoveho?
fscanf(input, "%d", &howmany);
int pole[howmany];
Jakoze si program nejdrive z nejakeho textaku nacte jak velke bude pole a az potom jej definuje.
Dik moc
12. 11. 2007
To locksley: Stacilo napsat pred to cin.getline(adress, 80); - cin.get(); :D:D:D
21. 2. 2008
To echo112: No jestli se nepletu tak tímto způsobem se vypíše kolik prvků příslušné pole je shopno pojmout.
Způsobů jak získat informaci o tom kolik příslušné pole obsahuje prvků je určitě mnoho.
Nenapadá mě způsob jak to zjistit pro pole třeba intů, jinak než jsi někde uchovávat, kolik jich uživatel zadal.
Ale pro řetězec mě napadají dva způsoby:
1. Funkcí std::strlen(pole) , vzhledem ktomu že je tento seriál jak koukám čistě o C++, tak bych jen podotknul že tato funkce pochází ze standardní knihovny pro C.
2. Spočíat si to posvém :
#include <iostream>
using namespace std;
int main (void)
{
int POCET_PISMEN=0; //zde budeme postupně počítat platná písmenka pole
char pole[10] = "ahoj"; //pole které se bude počítat
for(POCET_PISMEN=0;pole[POCET_PISMEN] != '\0';POCET_PISMEN++);
Cyklus postupně prochází pole dokud nenarazí na ukončovací znak, který je na konci každého řetězce. (ukončovací znak je '\0' ). Při procházení pole, je v proměnné POCET_PISMEN, uchován index prvku pole který se bude porovnávat. Když na této pozici je ukončovací znak, cyklus skončí a v proměnné POCET_PISMEN bude uchována pozice tohoto znaku od začátku řetězce, respektive kolik znaků řetězec obsahuje včetně ukončovací nuly.
Pravděpodobně budeme chtít délku řetězce bez ukončovací nuly,tzn že bysme měli jedničku odečíst. Ovšem to by byla chyba, vzhledem ktomu že pole je indexováno od 0, vždy bylo číslo v POCET_PISMEN o jedno menší než skutečná pozice písmene které bylo porovnáváno.
cout << POCET_PISMEN;
return 0;
}
3. 12. 2008
zkusil jsem udělat úkol z této lekce a po zkompilování a spuštění se mi ukáže error(odesílat/neodesílat). Než jsem přidal příkaz na vypsání jména pozpátku, tak vše fungovalo bez problémů.
Zde přidávám kód a omlouvám se za jeho nepřehlednost a prosím o radu
#include <iostream>
#include <cstring>
#include "csznaky.h"
using namespace std;
int main()
{
int a;
int y;
int z=80;
int vysledek;
int cisla[5];
char jmeno[y];
cout << "V"<<ii<<"tejte v "<<uu<<"kolu pro lekci 4\n";
for(y=z;y>=0,y--;)
cout<<"*";
cout << "\nVa" << ss << "e jm" << ee << "no pros" << ii << "m: ";
cin >> jmeno;
int vek;
for(y=z;y>=0,y--;) cout<<"*";
cout << "\nV" << aa << ss << " v" << _e << "k pros" << ii << "m: ";
cin >> vek;
int i;
for(y=z;y>=0,y--;) cout<<"*";
cout << "Zadejte pros" << ii << "m p" << _e << "t " << cc << ii << "slic: \n";
for(i=0; i<5; i++)
{
cout << i+1 << ". "<<cc<<ii<<"slice: ";
cin >> cisla[i];
}
cout <<"Sou"<<cc<<"et zadan"<<yy<<"ch "<<cc<<ii<<"sel je: ";
cout <<cisla[0]<<"+"<<cisla[1]<<"+"<<cisla[2]<<"+"<<cisla[3]<<"+"<<cisla[4]<<" = ";
vysledek=cisla[0]+cisla[1]+cisla[2]+cisla[3]+cisla[4];
cout<<vysledek;
cout<<endl;
for(y=z;y>=0,y--;) cout<<"*";
cout << "\nVa" <<ss<<"e jm"<<ee<<"no pozp"<<aa<<"tku je: \n";
for(i=strlen(jmeno);i>=0;i--)
{
cout<<jmeno[i];
}
cout<<endl;
cin.get();
cin.get();
return 0;
}
25. 2. 2009
pri kompilacii mi dev-c++ vypise chybu:
variable-sized object 'omeno' may not be initialized
pise to v tejto casti kodu:
int dlzka = strlen(meno);
char omeno[dlzka] = meno;
Kod:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
//Znaky:
char ss = 231;
char ee = 130;
char ii = 161;
//Meno:
char meno[255];
cout << "Va" << ss << "e jm" << ee << "no pros" << ii << "m: ";
cin.getline(meno, 255);
//Vek:
int vek;
cout << "Va" << ss << " vek:";
cin >> vek;
cin.get();
//Cisla + Sucet
int sucet;
int cisla[5];
int i;
cout << "Zadaj 5 cisel: \n";
for (i=0; i<5; i++)
cin >> cisla[i];
sucet = cisla[0] + cisla[1] + cisla[2] + cisla[3] + cisla[4];
cout << "\nSucet cisiel je: " << sucet;
//Meno odzadu:
int dlzka = strlen(meno);
char omeno[dlzka] = meno;
cout << omeno << sizeof omeno;
cin.get();
cin.get();
return 0;
}
Prosim vas kde najdu odeslane prace od odstatnich uzivatelu nikde to nemuzu najit.
3. 5. 2010
Reagoval na komentář od uživatele xRomanx :
no proč tam pišete <> takove znaky proč ne třeba # include <iostream>
dobrý den mám tu menší problém ať se snažím sebevíc strlen() mi vratí max velikost 4 takže program mi funguje pokud zadávam krátka jména ale pokud zadám něco delšího vypíšou se jen posledni 4 písmena :/....
Ahoj, omlouvám se, že to dávám zrovna sem, ale potřeboval bych vědět so je void a jak se používá. Popř. existuje nějaký typ proměnné, kam bych mohl zapsat třeba tohle: cout << "Ahoj světe" << jmeno << "takhle se jmenuji222"; ?(ty dvojky jsou tam jenom proto, aby tam nebyly jen písmena)
díky za odpověď
21. 10. 2010
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
const int pocet_cisel=5;
char s = 231;
char e = 130;
char i = 161;
char a = 160;
char je = 216;
char name[20];
int vek;
cout << "Va" << s <<"e jm" << e << "no pros" << i <<"m :";
cin.get(name,20);
cout << "V" << a << s <<" v" << je << "k :";
cin >> vek;
int cisla[pocet_cisel];
int p;
cout << "nyni zadej 5 cisel.\n";
for (p=1;p<=pocet_cisel;p++)
{
cout << "cislo " << p << " :";
cin >> cisla[p];
}
int soucet = 0;
int q;
for (q=1;q<=pocet_cisel;q++)
soucet = soucet + cisla[q];
cout << "soucet cisel jest :" << soucet << "\n";
int str = strlen(name);
int h;
for (h=str;h>=0;h--)
cout << name[h];
cin.get();
cin.get();
return 0;
}
21. 10. 2010
Reagoval na komentář od uživatele Nightshare :
nemas spatne nastavenou velikost pole kam se ti ulozi jmeno? dej char jmeno[20] a pak cin.getline(jmeno,20) a melo by to byt..
... Akorát bez tabulkového designu :) Na to nemám čas;)
// cviceni4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <string.h>
using namespace std;
int main()
{
/*inicializování znaků české diakritiky */
const char d_i=214;
const char d_e=130;
const char d_a=160;
const char d_y=236;
const char h_r=253;
const char h_s=231;
const char h_e=216;
const char h_c=159;
/*úvodni hlaska*/
cout <<"V"<<d_i<<"tejte v m"<<d_e<<"m nov"<<d_e<<"m programu!\nStisknut"<<d_i<<"m kl"<<d_a<<"vesy ENTER p"<<h_r<<"ejdete k dal"<<h_s<<d_i<<"mu kroku.";
cin.get();
cout <<"\nZadejte pros"<<d_i<<"m va"<<h_s<<"e jm"<<d_e<<"no:\t";
char cele_jmeno[25];
cin.getline(cele_jmeno, 25);
int b = strlen(cele_jmeno);
cout <<"V"<<d_y<<"pis jm"<<d_e<<"na pozp"<<d_a<<"tku je:";
int i;
for (i = b; i >=0; i--) {
cout << cele_jmeno[i];
}
cin.get();
cout <<"\nNyn"<<d_i<<" zadejte va"<<h_s<<" v"<<h_e<<"k:\t";
int vek;
cin >> vek;
cin.get();
cout <<"Zadejte p"<<h_e<<"t "<<h_c<<d_i<<"sel:";
int cisla[6];
int a;
for (a = 0; a<5; a++)
{
cout <<"\n\tZadejte cislo" << a+1 << ".";
cin >> cisla[a];
}
int vysledek = cisla[0]+cisla[1]+cisla[2]+cisla[3]+cisla[4];
cout <<"\nV"<<d_y<<"sledeke je:\t" << vysledek;
cin.get();
cin.get();
return 0;
}
30. 10. 2010
#include <stdio.h>
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
cout << "Vaše jméno prosím: ";
char jmeno[20];
cin.getline(jmeno, 20);
cout << "Váš věk prosím: ";
char vek[3];
cin.get(vek, 3);
cin.get();
int cisla[5];
for (int i=0; i<5; i++) {
cout << "Zadej " << i+1 << ". cislo: ";
cin >> cisla[i];
}
cout << jmeno << endl;
cout << vek << endl;
for (int i=0; i<5; i++) {
cout << i+1 << ". cislo je: " << cisla[i] << endl;
}
int vysledek;
vysledek = cisla[0] + cisla[1] + cisla[2] + cisla[3] + cisla[4];
cout << "Soucet cisel je: " << vysledek << endl;
int delka=strlen(jmeno);
for (delka; delka>=0; delka--) {
cout << jmeno[delka];
}
return 0;
}
29. 11. 2010
cawte ludia chcel by som sa opytat.... celkom som nepochopil toto ze "Zajímavosti s řetězci"
toto s tym ze" #include <cstring> // A TAK DALEJ :D newem ze ako to mam napisat :(
... vedel by mi niekto napisat zdrojovi kod ako sa to robi ???...dakujem za odpovede :D
Tady je můj program pracuje dobře až na to, že když sečtu ty čísla tak mě to vyhodí výsledek o 240 větší než má být tak sem na konec přidal i -240 a už to jde. Pídím se, ale proč mě to tak blbne tak. Vytvořil jsem nový projekt a udělal ty čísla znova, ale pořád to dělalo to samé tak je chyba asi někde jinde než v tom 1. programu. Prosím o pomoc
#include <cstdlib>
#include <iostream>
using namespace std;
char s= 231; //š
char e= 130; //é
char e2=216; //ě
char i= 161; //í
char u= 133; //ů
char a= 160; //á
char c= 159; //č
char jmeno[21];
char cisla[5];
int vysledek;
int vek;
int d; //délka jména pomocí strlen
int main(int argc, char *argv[])
{
cout<<"\t\t\t\t* Va"<<s<<"e jm"<<e<<"no pros"<<i<<"m: *\n\t\t\t\t* (max. znak"<<u<<"..20) * \n\t\t\t\t**********************\n";
cin.getline(jmeno, 20);
d=strlen(jmeno);
cout<<"\t\t\t\t ---------------\n \t\t\t\t V"<<a<<s<<" v"<<e2<<"k pros"<<i<<"m:\n\t\t\t\t ---------------\n";
cin>>vek;
cout<<"\t\t\t\t ===============\n\t\t\t\t 5 "<<c<<i<<"sel pros"<<i<<"m:\n\t\t\t\t ===============\n";
for(int i2=1; i2<6; i2++)
{cin>>cisla[i2];
}
vysledek=cisla[1]+cisla[2]+cisla[3]+cisla[4]+cisla[5]-240;
cout<<"\n\n"<<vysledek<<"\n";
cout<<"Jm"<<e<<"no pozp"<<a<<"tku je:";
for(int i=d; i>0; i--)
{cout<<" "<<jmeno[i-1];
}
cout<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
ps: a ještě něco, když zadám větší jak jednociferné číslo tak mě to pusti zas jenom do 5-ti znaků a pak to hned sečte jak např. píšu 22,54,78 a stop teda zadám pouze 3 čísla a výsledek vzejde z čísel z př. tedy 2+2+5+4+7. Taktéž žádam o pomoc díky
24. 2. 2011
Reagoval na komentář od uživatele fleury93 :
Dej ty čísla přes int, a né přes char, když to dáš jako char tak se ti to ukládá jako by v množině { '2', '2', '5' atd ;) takže jen změn místo char na int a mělo by to jít
8. 7. 2011
char menodva[6];
int lol;
lol=strlen(meno);
int lolo=lol;
int i;
for (i=0;i<lol;i++)
{
lolo=lolo-1;
menodva[i]=meno[lolo];
}
menodva[lol]='\0';
1. 8. 2011
Můžu se zeptat, jaké mé využití to bool popřípadě mi prosím napište i nějáký lehký zdrojový kod s jedo využitím dík
Nefunguje mi zdrojak
#include <cstring>
using namespace std;
int main()
{
char jmeno[20];
cout << "Zadejte vase jmeno:\n"; //tu mi vyhadzuje chybu
cin.getline(jmeno, 20); // čte celý řádek
cout << "vase jmeno je " << jmeno << ".\n";
cin.get();
cin.get();
return 0;
}
Ak dám namiesto <cstring> <iostream>, funguje to, ale ak napíšem viac znakov ako 19 a stlačím enter, vypne program.
10. 8. 2011
zde pridavamuj doufam plne funkcni zdrojak:D
#include <iostream>
#include <cstring>
#include <string.h>
using namespace std;
int main()
{
char ch=159;char sh=231;char ii=161;char aaa=160;char ee=216;char eee=130;
char jmeno[20] = {0};
int cisel[6];
int soucet,a,b,c,d,e =0;
int year;
cout << "Va"<<sh<<"e jm"<<eee <<"no:";
cin.getline(jmeno, 20);
cout << "V"<< aaa << sh << " v"<< ee <<"k:";
cin >> year;
cin.clear();
cin.get();
cout <<"Zadejte p" <<ee <<"t " <<ch <<ii <<"sel:\n";
cin >> cisel[0]>>cisel[1]>>cisel[2]>>cisel[3]>>cisel[4];
cin.get();
a=cisel[0];b=cisel[1];c=cisel[2];d=cisel[3];e=cisel[4];
soucet = a+b+c+d+e;
cout <<"Va" <<sh <<"e jm" <<eee <<"no po zp"<<aaa<<"tku je\n";
for (int i=19; i>=0;i--)
{if (jmeno[i]!=0)
cout << jmeno[i]; }
cout << "\n";
cout <<"V"<<aaa<<sh<<" v"<<ee<<"k je\n";
cout <<year;
cout << "\n";
cout <<"a sou"<<ch<<"et "<<ch<<ii<<"sel je\n";
cout << soucet;
cin.get();
cin.get();
return 0;
}
Mělo by to být funkční :)
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
cout << "Va" << char(231) << "e jm" << char(130) << "no pros" << char(161) << "m?\n";
char name[20];
cin.getline(name,20);
cout << "V" << char(160) << char(231) << " v" << char(216) << "k pros" << char(161) << "m?\n";
int age;
cin >> age;
cout << "Zadejte pros" << char(161) << "m 5 " << char(159) << char(161) << "sel:\n";
cin.get();
int numbers[5];
int i,tmp=0;
for (i=0;i!=5;i++)
{
cin >> numbers[i];
tmp = tmp + (int)numbers[i];
}
cout << endl << tmp;
for (i=strlen(name);i>=0;i--)
cout << name[i];
cin.get();
cin.get();
return 0;
}
#include <iostream>
using namespace std;
int main()
{
char meno[10];
cout<<"Vase meno prosim:";
cin>>meno;
int vek;
cout<<"Vas vek prosim:";
cin>>vek;
char cisla[5];
cout<<"Zadajte prosim jednociferne cislo->";
cin>>cisla[0];
cout<<"druhe:";
cin>>cisla[1];
cout<<"tretie:";
cin>>cisla[2];
cout<<"stvrte:";
cin>>cisla[3];
cout<<"piate:";
cin>>cisla[4];
cout<<"Toto je sucet vami zadanych cisel:"<<cisla[0]+cisla[1]+cisla[2]+cisla[3]+cisla[4]-240;
cout <<"\nVase meno naopak je->"<<meno[9]<<meno[8]<<meno[7]<<meno[6]<<meno[5]<<meno[4]<<meno[3]<<meno[2]<<meno[1]<<meno[0];
cout<<"\nA teraz vam navyse poviem Vas vek:";
cout<<"\nVas vek je:"<<vek<<" rokov.\nDakujem.";
cin.get();
cin.get();
return 0;
}
jednoducho a prehľadne jedina chyba je ,že som od suctu odcital 240 lebo vždy ukazovalo o 240 viac :)
#include <iostream>
#include <cstring>
using namespace std;
const int size = 30;
const int stop = 5;
char a=160, c=159, s=231, e=130, ee=216, i=161;
char jmeno[size];
char vek[size];
int cislo, hodnota[stop], prom=0,m;
int main()
{
cout << "\t\t ----------------------------------------";
cout << "\n\t\t |\t\t\t\t\t |";
cout << "\n\t\t |";
cout << "\t\tVytvoril: Jan Haring\t |\n\t\t |\t\tpro programujte.com\t |";
cout << "\n\t\t |\t\t\t\t\t |\n";
cout << "\t\t ----------------------------------------\n\n";
cout << "Va"<<s<<"e jm"<<e<<"no pros"<<i<<"m: ";
cin.get(jmeno,size).get();
cout << "V"<<a<<s<<" v"<<ee<<"k pros"<<i<<"m: ";
cin.get(vek,size).get();
cout << endl;
for (cislo=1;cislo<=stop;cislo++)
{
cout << "Zadejte " << cislo<<" "<<c<<i<<"slo: ";
cin >> hodnota[prom++];
}
int soucet = (hodnota[0]+hodnota[1]+hodnota[2]+hodnota[3]+hodnota[4]);
cout << "\nSou"<<c<<"et "<<c<<i<<"sel je: "<< soucet << endl;
cout << "Va"<<s<<"e jm"<<e<<"no pozp"<<a<<"tku je: ";
for (m=strlen(jmeno);m>=0;m--)
{
cout << jmeno[m];
}
cout << "\n\nKONEC\n\n\n\n\n";
return 0;
}
5. 8. 2012
Výpísanie mena odzadu som vyriešil takto :
int a;
int b=10;
for (a=0; a<10; a++)
{
cout << meno[b] << "\n";
b--;
}
akurát tam vypíše meno od zadu aj nejaké nezmyselné znaky , to bude asi mať niečo spoločné s ASCII ...
5. 8. 2012
Celý funkčný kód ...síce to nieje veľmi prehľadné ale funguje ...
#include "iostream"
#include "iostream"
using namespace std;
int main()
{
char makcen_t=156;
char makcen_c=159;
char makcen_z=167;
char makcen_s=231;
char makcen_l=150;
char makcen_d=212;
char makcen_n=229;
char strieska_o=147;
char medzera=0;
int vek;
cout << "----------------------------------\n";
cout << "| |\n";
cout << "| |\n";
cout << "| Coded by: Michal FanatiK Vasko |\n";
cout << "| |\n";
cout << "| |\n";
cout << "----------------------------------\n";
char meno[20];
cout << "Napi" << makcen_s << "te svoje meno prosim\n";
cin >> meno;
cout << "Napi" << makcen_s << "te svoj vek prosim\n";
cin >> vek;
cout << "Zadajte 5 " << makcen_c << "isel...\n";
int cyklus;
int cisla[5];
int c = 0;
int d=1;
for (cyklus=0; cyklus<5; cyklus++)
{
cout << "Zadajte " << d << medzera << makcen_c << "islo\n";
cin >> cisla[c];
c++;
d++;
}
cout << "Spo" << makcen_c << "itavam " << makcen_c << "isla ktore ste zadali . Vysledok je: " << cisla[0] + cisla[1] + cisla[2] + cisla[3] + cisla[4] << "\n";
cout << "Va" << makcen_s << "e meno odzadu je: ";
int a;
int b=strlen(meno);
for (a=0; a<strlen(meno) + 1; a++)
{
cout << meno[b] << "\n";
b--;
}
cout << "\nKoniec\n";
cin.get();
cin.get();
return 0;
}
#63 FanatiK
Malo by to byť nejak takto:
int a;
for (a = strlen(meno) - 1; a > = 0; a--)
{
cout << meno[a] << " ";
}
cout << endl;
Treba ale includovať knižnicu cstring.
18. 1. 2013
Myslím, že v této lekci šlo hlavně o zpracování vstupu. Nenašel jsem zde opravdu ošetřený vstup. Co když zadám jméno delší než je velikost pole charů?
18. 1. 2013
cin.clear(); nevyčistí frontu jak tvrdí autor článku, to zajistí metoda ignore().
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char name[80], vek[4];
int cislo[5];
int soucet =0;
cout << "Zadejte Va" << char(231) <<"e jm" << char(130) << "no: \n";
cin.get(name,80);
cin.ignore(10000,'\n');
cout << "V" << char(160) << char(231) << " v" << char(216) << "k: \n";
cin.get(vek,4);
cin.ignore(10000,'\n');
for (int i = 0; i<5; i++){
cout << "Zadejte " << i+1 << ". " << char(159) << char(161) << "slo" "\n";
cin >> cislo[i];
soucet += cislo[i];
}
cout << soucet << endl;
for (int a=strlen(name)-1; a>=0 ; a--){
cout << name[a];
}
return 0;
}
cin.ignore(10000,'\n'); - ignoruje 10 tisíc znaků ve frontě, nenarazí-li dříve na nový řádek
Moje riešenie
#include<iostream>
#include<string>
using namespace std;
int main()
{
char meno[20];
int cisla[6];
int vek;
int s=0;
cout << "Vase meno prosim:";
cin.getline(meno,20);
cout << "Vas vek:";
cin >> vek;
cout << "Zadajte 5 cisel\n";
for(int i=0;i<5;i++){
cin >> cisla[i];
}
for(int i=0;i<5;i++){
s += cisla[i];
}
cout << s << endl;
for(int i=strlen(meno);i >= 0;i--){
cout << meno[i];
}
cout << endl;
return 0;
}
Funkčný :)
char a=231; //š
char b=160; //á
char c=236; //ý
cout << "Ahoj kamo"<<a<<"ko ako sa vol"<<b<<a<<"?\n";
char meno[20];
cin.getline(meno , 20);
cout << "V ktorom roku bol postaven"<<c<< " tvoj dom?\n";
char rok[10];
cin.getline(rok, 10);
cout <<"Aka je je ho adresa?\n";
char adresa[30];
cin.getline(adresa, 30);
cout << "Vol" << b << a << " sa: " << meno << endl;
cout << "Dom bol postaven" <<c<<" v roku: " << rok << endl;
cout << "Jeho adresa je: " << adresa<< endl;
15. 11. 2020
Co programátor to jiný styl psaní kódu :-) Přidávám svou verzi - funkční. Psáno ve VS Comunity 2019
#include <iostream>
#include <array> //size()
using namespace std;
//funkce zpracuje zadaný text a vráti text s dosazenými CZ znaky
string CZtext(string str)
{
for (int i = 0; i < str.length(); i++)
{
switch (str[i])
{
case 'á':
str[i] = char(160); break;
case 'Á':
str[i] = char(181); break;
case 'é':
str[i] = char(130); break;
case 'É':
str[i] = char(144); break;
case 'í':
str[i] = char(161); break;
case 'Í':
str[i] = char(161); break;
case 'ý':
str[i] = char(236); break;
case 'Ý':
str[i] = char(237); break;
case 'ó':
str[i] = char(162); break;
case 'Ó':
str[i] = char(224); break;
case 'ú':
str[i] = char(163); break;
case 'Ú':
str[i] = char(233); break;
case 'ů':
str[i] = char(133); break;
case 'ď':
str[i] = char(212); break;
case 'Ď':
str[i] = char(210); break;
case 'ť':
str[i] = char(156); break;
case 'Ť':
str[i] = char(155); break;
case 'ň':
str[i] = char(229); break;
case 'Ň':
str[i] = char(213); break;
case 'ž':
str[i] = char(167); break;
case 'Ž':
str[i] = char(166); break;
case 'č':
str[i] = char(159); break;
case 'Č':
str[i] = char(172); break;
case 'š':
str[i] = char(231); break;
case 'Š':
str[i] = char(230); break;
case 'ř':
str[i] = char(253); break;
case 'Ř':
str[i] = char(252); break;
case 'ě':
str[i] = char(216); break;
}
}
return str;
}
int main()
{
const int VELIKOST = 20;
const int SIZE = 5;
cout << CZtext("Vaše jméno prosím:");
//řetězec se uloží do jednoho pole
char jmeno[VELIKOST];
cin.get(jmeno, VELIKOST);
int rok;
cout << "\n" << CZtext("Jaký je Váš věk: ");
cin >> rok;
std::array<int, SIZE> pole;
int soucet = 0;
cout << "\n" << CZtext("Zadejte postupně 5 čísel: \n");
for (int i = 0; i < pole.size(); i++)
{
cout << i+1 << ") ";
cin >> pole[i];
soucet += pole[i];
}
cout << "\n" << CZtext("Zadali jste pole[")<< pole.size() << "] = {";
for (int i = 0; i < pole.size()-1; i++)
{
cout << pole[i] << ", ";
}
cout << pole[pole.size()-1] << "}";
cout <<"\n" << CZtext("Součet čísel v poli je: ") << soucet << endl;
//Vypíše zadané jméno pozpátku
cout << CZtext("Vaše jméno pozpátku je: ");
for (int i = strlen(jmeno); i >= 0; i--)
{
cout << jmeno[i];
}
cout << endl;
return 0;
}