only first call getline()
appears read in std::cin
. fact buffer
contains problem - why doesn't getline()
overwrite contents of buffer
?
how can second call getline()
read in?
my code:
const int recordlen = 20; // truncate input 20 chars void gettext(char line[]) { std::cout << "enter gettext: "; std::cin.getline(line, recordlen+1); for(int = std::strlen(line); < recordlen; i++) { line[i] = ' '; } line[recordlen] = '\0'; } int main() { char buffer[340]; gettext(buffer); std::cout << buffer; std::cout << "now enter more text:"; // put more text buffer std::cin.getline(buffer, 30); std::cout << "you entered : " << buffer << std::endl; return 0; }
so - example output of program:
enter gettext: alskdjfalkjsdfljasldkfjlaksjdf alskdjfalkjsdfljasldnow enter more text:you entered :
after display of "now enter more text:", program displays "you entered:". not give me opportunity enter more text, neither display characters truncated previous call getline().
std::cin.getline(line, recordlen+1);
here, if input longer recordlen
chars, remaining characters not read , remain in stream. next time read cin
, you'll read remaining characters. note that, in case, cin
raise failbit
, you're experiencing.
if first input recordlen
chars long, newline remain in stream , next call getline
appear read empty string.
other that, getline
overwrite buffer.
if want ignore beyond first recordlen
chars on same line, can call istream::clear
clear failbit
, istream::ignore
ignore rest of line, after istream::getline
:
std::cin.getline(line, recordlen+1); std::cin.clear(); std::cin.ignore( std::numeric_limits<streamsize>::max(), '\n' );
Comments
Post a Comment