码迷,mamicode.com
首页 > 编程语言 > 详细

C或C++输入缓冲区问题

时间:2015-08-11 18:25:28      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

当需要在控制台上输入多行时,特别是字符时,容易出现缓冲区的问题

如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 }

 

C或C++输入缓冲区问题

标签:

原文地址:http://www.cnblogs.com/yanliang12138/p/4721338.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!