首先,我们知道在C++中,空格或者回车被认为是字符串的分割标志,使用cin输入string类的字符串时遇到会自动停止接收输入
例如,当如下程序时:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 string s; 6 cin>>s; 7 8 for(int j = s.size()-1 ; j>=0 ; j--){ 9 cout<<s.at(j); 10 } 11 return 0;
运行结果如下,我们可以看到,输入的字符串实际上只接收到了空格前半部分。
这个时候我们就需要用到getline()这个函数,该函数可以接受字符到输入流(带空格),直到遇到结束标志符才结束,默认为‘\n‘
也可以是getline(cin,s,‘#‘),getline(cin,s,‘%‘)
这样就解决单行输入问题啦!
那么,当我想输入
I love China
I love Beijing
该怎么办呢?
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int n ; 5 cin>>n; 6 string a[n]; 7 for(int i = 0; i < n; i++){ 8 getline(cin,a[i]); 9 } 10 11 for(int i = 0 ; i< n ; i++){ 12 for(int j = a[i].size()-1 ; j>=0 ; j--){ 13 cout<<a[i].at(j); 14 } 15 cout<<endl; 16 } 17 }
是这样吗?细心地读者会发现
输出为什么会少了一行呢?而且出现了一行空行,
这是因为输入数字之后,敲回车,产生的换行符仍然滞留在输入流了,
接着就被getline(cin,s)给读进去了,
此时的s=“\n”,所以在2的后边会有一个空行
同时for循环中的i也自增1,所以会少读一行
要解决这个问题,就要干掉滞留在输入流中的换行符。
这就用到了cin.ingore()函数
同样,我们也可以用getchar()代替cin.ingore(),效果是一样的
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int n ; 5 cin>>n; 6 cin.ingore(); //或者是getchar(); 7 string a[n]; 8 for(int i = 0; i < n; i++){ 9 getline(cin,a[i]); 10 } 11 12 for(int i = 0 ; i< n ; i++){ 13 for(int j = a[i].size()-1 ; j>=0 ; j--){ 14 cout<<a[i].at(j); 15 } 16 cout<<endl; 17 } 18 }
完毕!!
原文地址:https://www.cnblogs.com/zz-1120-wtenlb/p/10567599.html
时间: 2024-10-07 16:48:18