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

Cin.getline – C / C++ – Fórum – Programujte.comCin.getline – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Avidius0
Newbie
30. 12. 2011   #1
-
0
-

Asi už jsem otravnej, ale proč mi to vypisuje jméno špatně? Díky.

#include<iostream>
using namespace std;
int main()
{
   cout << "How old are you?\n";
  int year;
  cin >> year;
  cin.get();
  cout << "Your name?\n";
      char address[80];
    cin.getline(address, 80);
    int PRD[4];
    int i=0;
    while (i<5)
    {
    cout << "Write your number:\n";
    cin >> PRD[i];
    i++;
}
  int m=PRD[0]+PRD[1]+PRD[2]+PRD[3]+PRD[4];
  cout << "Your name is: " << address << "\n";
  cout << "You are " << year << " years old\n";
  cout << "Your number is:" << m;
  cout << "\nKonec!";
  cin.get();
  cin.get();
  return 0;
}

Nahlásit jako SPAM
IP: 213.220.217.–
Reklama
Reklama
ondra.holub+1
Stálý člen
30. 12. 2011   #2
-
0
-

No, nechce se mně v tom moc hrabat. Ale určitě je špatně přístup na PRD[4], když je to deklarované jenom jako pole 4 prvků

Dále bych zvážil pro načítání řádku funkci, která čte do std::string - je to v 99% případů lepší, než se vrtat ve velikostech bufferů.

A také bych zkusil čísla načítat přímo do číselných proměnných, dá to míň práce.

Nahlásit jako SPAM
IP: 212.96.189.–
Avidius0
Newbie
1. 1. 2012   #3
-
0
-

#2 ondra.holub
Všechno funguje, alespoň doufám, jen jméno (char address) vypisuje špatně.

Nahlásit jako SPAM
IP: 213.220.217.–
liborb
~ Redaktor
+18
Guru
2. 1. 2012   #4
-
0
-

Zkus opravit fatální chybu, na kterou tě upozornil ondra.holub a pokud to nepomůže, tak sem hoď výpis běhu toho tvého programu (co zadáváš a co se ti vypíše).

Nahlásit jako SPAM
IP: 78.80.52.–
Avidius0
Newbie
2. 1. 2012   #5
-
0
-

Byla ona fatální chyba v absenci: "#include<string>"?

Nahlásit jako SPAM
IP: 213.220.217.–
liborb
~ Redaktor
+18
Guru
2. 1. 2012   #6
-
0
-

Ne.

 int PRD[5]; // nikoliv 4, když přistupuješ k prvkům 0 až 4
Nahlásit jako SPAM
IP: 78.80.52.–
Avidius0
Newbie
2. 1. 2012   #7
-
0
-

   

Ježiši, já jsem blbej, ještě jsem na to koukal a říkal jsem si, že k tomu je ještě ten prvek [0].     No nic, díky.  

Nahlásit jako SPAM
IP: 213.220.217.–
Avidius0
Newbie
2. 1. 2012   #8
-
0
-

Tak ještě dotaz, měl jsem vypsat jméno pozpátku, udělal jsem to dobře? Jde lépe/snáze? A teď mi nefungují čísla, zadám například čtyřikrát 0  jednou 1 a jako výsledek mi to vyhodí 10x4433c4.

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
   cout << "How old are you?\n";
   int k=80;
  int year;
  cin >> year;
  cin.get();
  cout << "Your name?\n";
      char address[80];
      cin.getline(address,80);
    int PRD[5];
    int i=0;
    while (i<5)
    {
    cout << "Write your number:\n";
    cin >> PRD[i];
    i++;
}
int p=0;
  int m=PRD[0]+PRD[1]+PRD[2]+PRD[3]+PRD[4];
  cout << "Your name is: " << address << "\n";
  cout << "You are " << year << " years old\n";
  cout << "Your number is: " << m << cout << "\n";
  while (p<=strlen(address))
  {cout << address[strlen(address)-p];
  p++;
}
  cout << "\nEnd!";
  cin.get();
  cin.get();
  return 0;
}

Nahlásit jako SPAM
IP: 213.220.217.–
liborb
~ Redaktor
+18
Guru
2. 1. 2012   #9
-
0
-

Na vypsání řetězce odzadu asi lépe použít for cyklus od strlen-1 do 0. A počkej až KIIV uvidí tu tvoji podmínku, ten ti jich nandá :) (opakovaně zjišťuješ délku řetězce). No a to načtení čísel ... proč máš po načtení year cin.get()?

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.211.–
Avidius0
Newbie
2. 1. 2012   #10
-
0
-

cin.get() tam je protože mi to bylo vysvětleno jako oprava před cin.getline. ("Problém spočívá v tom, že když cin přečte rok, tak zanechá znak nového řádku generovaný klávesou Enter ve vstupní frontě. Potom cin.getline() přečte nový řádek jako prázdný a přiřadí prázdný řetězec do pole")

Tu délku zjištuji pořád dokola, protože sem nevěděl jak to uložit například do int. Zkoušel jsem to jako:

strlen(address)=int p;

Nahlásit jako SPAM
IP: 213.220.217.–
KIIV+42
God of flame
2. 1. 2012   #11
-
0
-

#9 liborb
uz sem videl... radsi sem delal ze nevidim :D

#10 Avidius
zkusil si to taky obracene?  int p = strlen(address) ?

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Avidius0
Newbie
2. 1. 2012   #12
-
0
-

Bohužel ne  ale to stejně neřeší ten výsledek ne?

Nahlásit jako SPAM
IP: 213.220.217.–
liborb
~ Redaktor
+18
Guru
2. 1. 2012   #13
-
0
-

Řeší to jenom to, že tu délku máš uloženou a pak už ji jenom testuješ s aktuální pozicí.
No a ptal jsem se záměrně, jestli víš, že ti na vstupu zůstává znak nebo jestli to tam dáváš mechanicky, protože si to někde viděl. A s tím výsledkem ... než postoupíme dál ... co si třeba, po načtení všech čísel do toho pole, je nechat všechny vypsat, ať víš, co se ti tam skutečně uložilo.

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.211.–
Avidius0
Newbie
2. 1. 2012   #14
-
0
-

Vypisuje to dobře. Problém bude tedy asi v int m. Zkusil jsem zobrazit i pouze první znak a beze změny. Hádám, že nějak špatně vypisuji toto: int m=PRD[0];

nebo je špatně už int PRD[5];

Jinak, koukal jsem co by mohlo být 4433c4 a je to fialová(předpokládám, že jste to věděli), takže je problém někde už v základu? Vážně netuším proč to takhle vypisuje..

Nahlásit jako SPAM
IP: 213.220.217.–
liborb
~ Redaktor
+18
Guru
2. 1. 2012   #15
-
0
-

Ok. Tak když je to dobře, tak z toho výpisu výsledku m dej pryč vypisování cout, což bude ten pointer za tou správnou jedničkou.

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.209.–
Avidius0
Newbie
2. 1. 2012   #16
-
0
-

Aha. To byla ta chyba? Už to funguje no, ale nechápu proč jsem to napsal tak.. Díky moc 

Nahlásit jako SPAM
IP: 213.220.217.–
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

Cin.getline — založil RybaRak-WM

Cin.getline — založil Hlavinka

Cin.getline — založil tupec

Cin, cin.get(),...atď — založil PeterSura

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý