[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] getline under en switch



In article <sslug@sslug> you wrote:

....
> getline opfører sig mystisk hvis jeg bruger den under en switch / case,
> så er jeg nød til at kalde den to gange ellers virker det som om den bare 
> ignorerer det første kald.

Er du sikker på at det ikke er input der er buffered.

Har prøvet eksemplet og det virker fint.
Sæt lidt debug-output ind i din kode og du vil opdage hvad der sker.

(passende udskrivning af variable med cout:

....
   std::cout << "Indtast valg : " << flush;
   std::cin >> valg;
   std::cout << " valg=" << hex << (int) valg << dec << endl;
   switch (valg)
   {
      case '1':
	std::cout << " Indtast noget : " << endl;
	std::getline(std::cin,noget);
	cout << noget.size() << "[" << noget << "]" << endl;
......


først gang hentes valg, 
næste gang en streng , dog sluttes når linieskift mødes.

Dvs. Tast  

  1tekst<RETURN> 

første gang, og du får 
valg='1' og noget="tekst"

Tast kun 

  1<RETURN>

og valg='1', og <RETURN> indlæses som giver en tom noget.

Det med at læse getline en gang til er jo kun fordi du ikke ved
hvad du får som input ?

Der er helt som det skal, da du jo kører buffered input.
Så måske:

   char dummy;
   std::cout << "Indtast valg : " << flush;
   std::cin >> valg;
   std::cin >> dummy; // læs LF, i DOS CR-LF ?
 ....

Hvis du altid regner med at have et linieskift, så skal du læse liniskiftet.
Bedre er måske at anvende ncurses hvis det er input fra consol du vil have.

  

-- 
Frank Damgaard 



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:08 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *