【发布时间】:2017-09-13 00:54:34
【问题描述】:
我的代码允许用户输入数字,对数字进行排序,然后按顺序输出。
示例输入:25,1,3-6
示例输出:1,3,4,5,6,25
但是,当用户输入2 5,1,3-6 之类的内容时,如果3 - 6 之类的情况下有空格,则程序将无法运行。
我使用cin>>ws; 试图摆脱空白,但它不起作用。
这是与此问题相关的部分代码(还有一些其他功能我没有包含,除非它们似乎是问题的根源):
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;
void get_nums(vector<int>& num_vec);
int main ()
{
int num1;
int num2;
cout << "\n Please, enter your HW: ";
vector<int> num_vec;
cin>>ws;
cout.flush();
do
{
cin>>ws;
cin>>num1;
num_vec.push_back(num1);
if(cin.peek() == ',')
{
cin.ignore();
}
else if(cin.peek() == '-')
{
cin.ignore();
cin>>num2;
for(++num1; num1<=num2; num1++)
{
num_vec.push_back(num1);
}
if(cin.peek() == ',')
{
cin.ignore();
}
}
}
while (cin.peek() != '\n');
cout<< "\n Do Problems: ";
for(int z=0; z<num_vec.size(); z++)
{
if(z+1==num_vec.size())
{
cout<<num_vec[z];
}
else if(z+2==num_vec.size())
{
cout<<num_vec[z]<<",and ";
}
else
{
cout<<num_vec[z]<<", ";
}
}
return 0;
}
【问题讨论】:
-
在这里尝试使用高级格式化输入操作只会让事情变得更复杂。逐个字符地解析这种输入会容易得多。
-
operator>>默认已经忽略了空格,所以使用std::ws是多余的,除非你先使用std::noskipws。