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

Nefunguje mi zdrojak – C / C++ – Fórum – Programujte.comNefunguje mi zdrojak – C / C++ – Fórum – Programujte.com

 

lukas.balaz0
Super člen
8. 8. 2011   #1
-
0
-

V štvrtej lekcii C++ mi nefunguje jeden zdrojak:

#include
using namespace std;
int main()
{
  char jmeno[20];
  cout << "Zadejte vase jmeno:\n";
  cin.getline(jmeno, 20);   
  cout << "vase jmeno je " << jmeno << ".\n";
  cin.get();
  cin.get();
  return 0;
}

Vyhadzuje mi chybu na riadkok

cout << "Zadejte vase jmeno:\n";

Neviete prosím niekto prečo.

Diki.

Nahlásit jako SPAM
IP: 62.168.112.–
fnenks+1
Stálý člen
8. 8. 2011   #2
-
0
-

#1 lukas.balaz
misto #include napis: #include <iostream>

Nahlásit jako SPAM
IP: 88.101.84.–
lukas.balaz0
Super člen
8. 8. 2011   #3
-
0
-

To som už skúšal, aj to vyšlo, ale kód     cin.gettline (jmeno, 20)         nesplnil, to čo mal a neskončil riadok po 19-tich písmenách. 

Nahlásit jako SPAM
IP: 62.168.112.–
fnenks+1
Stálý člen
8. 8. 2011   #4
-
0
-

no zadat muzes treba 50 znaku, ale do promenne jmeno se ulozi jen prvnich 19 znaku + \0

Nahlásit jako SPAM
IP: 88.101.84.–
lukas.balaz0
Super člen
8. 8. 2011   #5
-
0
-

Program je o tom, že riadok skončí, buď ak napíšem 19 písmen, alebo stlacim enter,

Ja som napísal 30, stlacil enter a progam vyplo

Napísal som 5, a vyslo to.

Zvlastne.

Nahlásit jako SPAM
IP: 62.168.112.–
fnenks+1
Stálý člen
8. 8. 2011   #6
-
0
-

#include <iostream>
using namespace std;
int main()
{
  char jmeno[20];
  cout << "Zadejte vase jmeno:\n";
  cin.get(jmeno, 20);
  cout << "vase jmeno je " << jmeno << ".\n";
  system("pause");
  return 0;
}

Nahlásit jako SPAM
IP: 88.101.84.–
fnenks+1
Stálý člen
8. 8. 2011   #7
-
0
-

hmm, ale stejne to nechapu, rozdil mezi cin.getline() a cin.get() je ten, ze u cin.get() znak noveho radku jde do fronty, takze jaktoze program preskoci cin.get(); cin.get(); kdyz pouzijem cin.getline?

Nahlásit jako SPAM
IP: 88.101.84.–
lukas.balaz0
Super člen
9. 8. 2011   #8
-
0
-

Nechápem čo chceš povedať, tak prosim mi ešte raz vysvetli Cin.get() a cin.gettline().

Diki

Nahlásit jako SPAM
IP: 62.168.112.–
fnenks+1
Stálý člen
9. 8. 2011   #9
-
+1
-
Zajímavé

#include <iostream>
using namespace std;
int main()
{
  char jmeno[15], prijmeni[15];
  cin >> jmeno; cin >> prijmeni;
  cout << "\nVase cele jmeno je " << jmeno << " " << prijmeni << endl;
  system("pause");
  return 0;
}

Program s cin: Objekt cin pouziva pro ukonceni retezce mezery(\0), tabulatory(\t), novy radek(\n). Takze kdyz ma clovek 3 jmena, napr: "Brittany Susan Pierce" a chce zadat do jmena "Brittany Susan" tak program ulozi do jmena Brittany, zbytek(Susan) jde do fronty. Pri dalsim cin, program rovnou ulozi Susan do prijmeni a vubec nevyzve uzivatele k zadani prijmeni.

Proto musime pouzivat cin.get() nebo cin.getline(), protoze tyto objekty pouzivaji k ukonceni retezce pouze novy radek(\n). Rozdil mezi cin.get a cin.getline je, ze u cin.get jde znak noveho radku(\n) do fronty(podobne jako u cin znak mezery), tim padem v tomto programu musime pouzit cin.getline().

Otazkou ale zustava, co se deje s programem, kdyz je vstup vetsi, nez 15 znaku :(

Nahlásit jako SPAM
IP: 88.101.84.–
lukas.balaz0
Super člen
9. 8. 2011   #10
-
0
-

Správou som sa opýtal Cura, či nevie ako, a on mi napísal, aby som za include dal <cstring>, ale chyba tam bola stále.

Som si istý, že cstring tam bude, ale tam treba odstrániť chybu z riadku

cout << "vase jmeno je " << jmeno << ".\n";

,lebo tam mi vypisuje chybu.

Nahlásit jako SPAM
IP: 62.168.112.–
lukas.balaz0
Super člen
9. 8. 2011   #11
-
0
-

(Pokračovanie)

Ale ako ďalej neviem.

Nahlásit jako SPAM
IP: 62.168.112.–
street punk+1
Návštěvník
9. 8. 2011   #12
-
0
-

Je to z knihy mistrovství v c++ ? ...a keď hej tak ktorá strana ?

Nahlásit jako SPAM
IP: 188.112.112.–
street punk+1
Návštěvník
9. 8. 2011   #13
-
0
-

   

#include <iostream>
const int arsize = 20;

int main ()
{
	using namespace std;
	char meno[arsize];
	cout<<"Zadajte vase meno: ";
	cin.getline(meno, arsize);
	cout<<"Vase meno je "<<meno<<endl;
	system ("pause");
	return 0;
}
Nahlásit jako SPAM
IP: 188.112.112.–
fnenks+1
Stálý člen
9. 8. 2011   #14
-
0
-

#13 street punk
no tos nam moc nepomohl, my resime co se stane s programem kdyz zadame napr 30 znaku?

Nahlásit jako SPAM
IP: 88.101.84.–
KIIV
~ Moderátor
+43
God of flame
9. 8. 2011   #15
-
0
-

   

#include <iostream>
#include <cstring>
using namespace std;

int main() {
  char test[20], test2[200];
  cin.getline(test,20);
  cin.getline(test2,200);

  cout << strlen(test) << "'" << test << "'\n";
  cout << strlen(test2) << "'" << test2 << "'\n";
  
  return 0;
}

Takze co se stane, kdyz se zada retezec napriklad 50 znaku? nacte se 19znaku do test, zbytek radku se zahodi, \n evidentne zustane protoze test2 je prazdny a program skoncil. Problem solved:

12345678901234567890ASSDFGHJKLWERTZUIDFGHJKL
19'1234567890123456789'
0''

kratsi nez 19 se nacte a pak se ceka na dalsi radek pro druhy retezec... \n se ve fronte nenechava

#include <iostream>
#include <cstring>
using namespace std;

int main() {
  char test[20], test2[200];
  cin.get(test,20);
  cin.get(test2,200);

  cout << strlen(test) << "'" << test << "'\n";
  cout << strlen(test2) << "'" << test2 << "'\n";
  
  return 0;
}

Get se chova trosku jinak:

12345678901234567890ASSDFGHJKLWERTZUIDFGHJKL
19'1234567890123456789'
25'0ASSDFGHJKLWERTZUIDFGHJKL'

u kratsiho retezce necha \n ve fronte - tj. druhej get nic nenacte

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
fnenks+1
Stálý člen
9. 8. 2011   #16
-
0
-

Ja to porad nechapu:

#include <iostream>
#include <cstring>
using namespace std;

int main() {
  char test[20], test2[200];
  cin.getline(test,20);
  cin.getline(test2,200);

  cout << strlen(test) << "'" << test << "'\n";
  cout << strlen(test2) << "'" << test2 << "'\n";
  int a; cin >> a;
  int b; cin >> b;
  system("pause");
  return 0;
}

-do test se nacte 19 znaku + \0
-do test2 se nacte \n

A proc program preskoci "cin >> a" a "cin >> b"?

Nahlásit jako SPAM
IP: 88.101.84.–
street punk+1
Návštěvník
9. 8. 2011   #17
-
0
-

čo od toho vlastne chcete ?..Podla môjho môžeš napísať aj 500 znakov, ale po stlačení enter sa ti zobrazí len prvých 19. 

V štvrtej kapitole určite iné od neho nechcú

Nahlásit jako SPAM
IP: 188.112.112.–
KIIV
~ Moderátor
+43
God of flame
9. 8. 2011   #18
-
0
-

#16 fnenks
zkus si tam vypsat treba fail bit - jestli se tam nenacetlo nejaky smeti a nezablokovalo cin (tj. cekas int a prijde ti tam znak... uz nikde dal nic nenactes, dokud nezresetujes ten priznak chyby)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
lukas.balaz0
Super člen
9. 8. 2011   #19
-
0
-

Myslím, že program, ktorý napísal Fnenks je v pohode, ale ten, čo napísal KIIV, tam do prvého riadku niečo napíšem, a vypne mi ho.

Nahlásit jako SPAM
IP: 62.168.112.–
KIIV
~ Moderátor
+43
God of flame
9. 8. 2011   #20
-
0
-

#19 lukas.balaz
ja ho taky spoustim v terminalu v linuxu... mimochodem windows ma terminal taky, tam se to sice vypne ale vypisy zustanou

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
fnenks+1
Stálý člen
9. 8. 2011   #21
-
0
-

#18 KIIV
bohuzel nevim jak na to.. :)

Nahlásit jako SPAM
IP: 88.101.84.–
KIIV
~ Moderátor
+43
God of flame
9. 8. 2011   #22
-
0
-

tak holt spoustet pause.exe (tj:  system("pause"); )

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
fnenks+1
Stálý člen
9. 8. 2011   #23
-
0
-

myslim to, ze po cit.getline() uz nenactu do promenne pres cin, ale je to asi jedno, stejne #include <iostream> asi v budoucnu nebudu muset pouzivat

Nahlásit jako SPAM
IP: 88.101.84.–
fnenks+1
Stálý člen
25. 8. 2011   #24
-
0
-

Tak jsem na to konecne prisel. Spoustet pause.exe neni reseni, pac porad potrebuju nacist neco do 'a'. Takze resenim je funkce, ktera smaze bordel z fronty:

#include <iostream>
using namespace std;

void clear_queue(void);

int main() {
  char test[20], test2[200];
 
  cin.getline(test,20); clear_queue();
  cin.getline(test2,200); clear_queue();
 
  cout << test << " " << test2 << "\n";
  int a; cin >> a;
  system("pause");
  return 0;
}

void clear_queue()
{
    if (!cin)
    {
     cin.clear();
     while (cin.get()!='\n')
           continue;
    }
}

Nahlásit jako SPAM
IP: 88.101.84.–
lukas.balaz0
Super člen
25. 8. 2011   #25
-
0
-

Neviem ako to je možné, ale mne ten program úplne fungoval aj bez použitia funkcie.
No ale o tom teraz netreba.

Nahlásit jako SPAM
IP: 62.168.112.–
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, 27 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ý