c++ - 对于没有空格的输入,C++ getline() 函数出现故障
问题描述
这是我最近遇到困难的代码-
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,k;
cin >> n >> k;
cin.ignore();
int arr[n];
fill_n(arr , n, 0);
int brr[n];
fill_n(brr , n, 1);
for(int i=1;i<=k;i++){ //Loop 1
char str[8];
cin.getline(str,9);
if(str=="CLOSEALL") //block 1
memset(arr , 0, n * sizeof(arr[0]));
else{
arr[str[6]-'0'-1]=1*brr[str[6]-'0'-1];
if(brr[str[6]-'0'-1]==0)
brr[str[6]-'0'-1]=1;
else
brr[str[6]-'0'-1]=0;
}
int c=0;
for(int j=0;j<n;j++){
if(arr[j]==1)
c++;
}
cout << c << endl;
}
我一直面临的问题是输入。根据问题,输入命令可以是CLICK N
,其中N是整数,或者CLOSEALL
(注意确切的大小写和空格数)。每当我使用 的输入时CLICK N
,程序运行良好,但只要我输入CLOSEALL
,它就不会执行块 1(在代码中提到)并且程序立即终止,即使循环 1(在代码中提到)必须一直持续到 的输入值k
。我认为这是与getline()
缓冲区有关的一些问题,因为CLOSEALL
没有任何空格并且出现故障,而CLICK N
有一个空格并且没有发生故障。有人可以建议如何纠正这种刷新差异,以便代码完美运行吗?
PS:我没有包括这个问题,因为我认为这里没有用。此外,我已根据需要将这些包包含在我的代码中。如果有人需要这个问题,我会编辑我的帖子。
解决方案
你可以试试std::stringstream
// swapping ostringstream objects
#include <string> // std::string
#include <iostream> // std::cout
#include <sstream> // std::stringstream
int main () {
std::string str;
std::cin >> str;
std::stringstream ss;
ss << str;
int foo,bar;
ss >> foo >> bar;
std::cout << "foo: " << foo << '\n';
std::cout << "bar: " << bar << '\n';
return 0;
}
// in:
// 100 200
// out:
// foo: 100
// bar: 200
推荐阅读
- nginx - nginx proxy_pass 中的变量导致 MIME 类型问题
- javascript - 通过php在url中传递参数
- python - 'object' 在 2d python 列表中不可下标
- postgresql - 从 pg_constraint 中删除重复的约束使数据库处于损坏状态
- r - 如果第 1 列具有特定值,如何计算第 2 列的平均值?R
- javascript - Raycaster 对象未定义 mouseover Three.js
- java - 在 android canvas 上画一个特殊的形状
- arrays - FormArray 无法在我的反应式表单上打印
- php - 从 SQL 表中存储变量以供以后使用 PHP
- python-3.x - uWSGI + Gevent 没有收到来自 Nginx 的请求