[C] Vlozeni retezce - hlaska
potrebuju radu, vkladam do promenne string z klavesnice pismena a cisla, jak mam udelat podminku if aby, po odentrovani "niceho" to vypsalo hlasku, ze mam neco napsat.
string a
cin >> a;
if( a == "" ) {
cout << "Musis neco zadat." << endl;
return;
}
takhle mi to nevachci
Diky za rady
Re: [C] Vlozeni retezce - hlaska
A nebude v a znak novýho řádku? že bys to porovnával s chr(13), nebo bych se zkusil juknout, jak velkej string vrátí sizeOf(a).
EDIT:
Tak jsem si to vyzkoušel a dělá mi to, že to enter nebere jako znak, ale příkaz, takže to pořád očekává vstup... Jsem víc zvyklej na C než na C++, tak bych to asi udělal přes scanf nebo gets...
Re: [C] Vlozeni retezce - hlaska
operator>> zrovna nechava specialni znaky v bufferu, takze v tom stringu fakt nic nebude (navic kvuli tomuhle, by jsi mel ten buffer vyprazdnovat pres cin.get() )
ohleden toho prazdneho stringu
testuj to na
if(a.size()==0)
EDIT:
na tyhle veci je nej http://www.cppreference.com/
Re: [C] Vlozeni retezce - hlaska
tak to asi jednoduse nepujde :(
Re: [C] Vlozeni retezce - hlaska
A takto?
Kód:
#include <iostream>
using namespace std;
int main() {
string a;
while(1){
getline(cin, a);
if (a.size()!=0) break;
cout << "Musis neco zadat." << endl;
}
}
Re: [C] Vlozeni retezce - hlaska
excelentni, presne tohle jsem potreboval K+
Re: [C] Vlozeni retezce - hlaska
mno tak jsem to uspechal, kdyz to vlozim do jiz hotoveho programu, tak mi to dela kraviny, ihned to totiz vypise tu chybovou hlasku, pak to funguje jak ma, ale tu hlasku to vypisuje aniz bych neco delal.
Re: [C] Vlozeni retezce - hlaska
Dokonce to funguje i takto:
int main(void) {
string cislo;
cout << "Neco napis: ";
getline(cin, cislo);
if (cislo.size() ==0){printf("Napis neco!");}
cout << cislo;
getch();
getch();
}
ale v tom hotovem programu to proste korektni neni ani v tomto pripade, jak kdyby to necekalo na to az tam neco zadam a hned to vypisuje chybu
Re: [C] Vlozeni retezce - hlaska
Možná by pomohlo nevinné else, možná... Zkus to takhle, připadně sem hodit kus kódu, jak to tam blbne...
Kód:
#include <iostream>
using namespace std;
int main() {
string a;
while(1){
cout << a.size() << endl;
getline(cin, a);
if (a.size()!=0) break;
else
cout << "Musis neco zadat." << endl;
}
}
Re: [C] Vlozeni retezce - hlaska
ani tak to nejde korektne:
Ten program je dosti obsahly, tady je ukazka:
void cmdNovyZaznam()
{
string cislo, nazev, mnozstvi, dp, dv, vydano;
cout << "Novy zaznam:" << endl;
cout << "Cislo polozky: ";
while(1){
getline(cin, cislo);
if (cislo.size()!=0) break;
else
cout << "Musis neco zadat." << endl;
}
cout << "Nazev polozky: ";
cin >> nazev;
cout << "Mnozstvi (ks/kg): ";
cin >> mnozstvi;
cout << "Datum prijmu (dd.mm.yy): ";
cin >> dp;
cout << "Datum vydeje (dd.mm.yy): ";
cin >> dv;
cout << "Vydano komu: ";
cin >> vydano;
getch();
}
Re: [C] Vlozeni retezce - hlaska
Je potřeba vyhodit obsah vstupního bufferu, před dalším použitím, takže na začátek tý funkce hodit cin.ignore(); a mělo by to jet :-)
[OT]
sem senior member - stáří si nevybírá :-D
[/OT]
Re: [C] Vlozeni retezce - hlaska
cin.ignore - proste vyhodit predchozi jako cout.flush
a pak testovat if(cin)
Re: [C] Vlozeni retezce - hlaska
Re: [C] Vlozeni retezce - hlaska
mala poznamka -- C++ je rigorozne typovy jazyk ! Ten jazyk, ktery pouzivas neni C nybrz C++ jelikoz pouzivas STL a ne C runtime.
takze pokud nekde mas
#ifndef _cplusplus
.....
-tak to neprelozis.
Ten getch(); na konci ti má sloužit k čemu přesně ? Opravdu chceš ať se zmáčkne pro pokračování jakákoliv klávesa ?
Re: [C] Vlozeni retezce - hlaska
Citace:
Původně odeslal
Kon
Ten getch(); na konci ti má sloužit k čemu přesně ? Opravdu chceš ať se zmáčkne pro pokračování jakákoliv klávesa ?
Jo jo getch(); to je ma oblibena fce :-D Jinak jestli je to C nebo C++ je mi vcelku jedno, hlavne ze to jede. Nejak nas to neucili co je co, akorat vim, ze string co je zde pouzit je z C++.