C++字符串的输入和用getline输入遇到的问题

    技术2022-07-11  80

    C++中的字符串读入我们通常是用 cin>>str; 它只要碰到空格或者换行符就意味着本字符串读取结束,且不会读取空格和换行符(相当于丛输入流中丢掉)。 而getline函数读取一行字符串,可以读入空格,遇到换行符结束(从输入流中丢掉该换行符),且紧跟后续的getline不会读取到该换行符。但是,注意一点就是:如果只读入了一个换行符(敲了回车),这个换行符虽然不会被读入,但是它会被当作结束符,这个时候什么也没有读入。

    举例:

    #include<string> #include<iostream> using namespace std; int main() { string str1,str2; cin>>str1>>str2; cout<<str1<<endl; cout<<str2<<endl; string line; getline(cin,line);//遇到回车,结束,不能继续读入 if(line.empty()) cout<<"empty"; }

    输入输出:

    zyhz lc zyhz lc empty

    唉,有时候可能会遇到这样的OJ题目,先读入一个整数,再读入若干行带有空格的字符串。 其实学C的时候就碰到过类似的问题,不过后来很长时间没遇到了,也很少再用scanf,printf,gets之类的函数。 再次碰到输入问题的时候,很是惭愧,好多地方都出了差错。 第一次,我竟然想用cin>>string去读取带有空格的字符串,可笑!!! 第二次,我把gets()和getline()混用,出现了意想不到的错误,应该是输入流方式的不同造成的。 以后再也不会将C里面的输入与C++的一块混用了,之前也碰到过这样莫名其妙的错误,但没有引起足够的重视,这次可算被教训了!

    Processed: 0.010, SQL: 9