标签:
当需要在控制台上输入多行时,特别是字符时,容易出现缓冲区的问题
如getchar()
getline()
我的解决办法是:在C中刷新下输入缓冲区fflush(stdin)
如下面这个例子:
(1)我需要在一行输入个数n,然后在下面每一行输入一个字符
1 #include<stdlib.h> 2 #include<stdio.h> 3 #include<string.h> 4 5 int main() 6 { 7 int n; 8 char str[10]; 9 int i=0; 10 scanf("%d",&n); 11 fflush(stdin); 12 while(n--) 13 { 14 str[i]=getchar(); 15 fflush(stdin); 16 i++; 17 } 18 for(int j=0;j<i;j++) 19 printf("%c \n",str[j]); 20 21 system("pause"); 22 }
在C++中,当cin>>后要是想再隔行输入getline(cin,str)时,会出现问题,这是因为
在第一次输入时,按下的回车键,还在缓冲区中,被getline给接受了,所以
在这之前可以用cin.ignore( numeric_limits<streamsize>::max(), ‘\n‘);
(2)如下面这个例子:我需要做的是在一行输入个数,然后每一行输入字符串
1 #include<iostream> 2 #include<vector> 3 #include<string> 4 using namespace std; 5 int main() 6 { 7 string s; 8 vector<string> str; 9 int n; 10 cin>>n; 11 cin.ignore(numeric_limits<streamsize>::max(),‘\n‘); 12 while(n--) 13 { 14 getline(cin,s); 15 str.push_back(s); 16 } 17 for(vector<string>::iterator i=str.begin();i!=str.end();i++) 18 cout<<*i<<endl; 19 system("pause"); 20 }
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4721338.html