使用标准输入c ++将整数读入int并将字符串读入字符串

时间:2014-11-11 07:26:21

标签: c++

#include <iostream>
#include <string>
using namespace std;

int main(){
  while (true){
  int n;
  string a;
  cin >> n;
  if (cin.eof())
    {break;}
  if (!cin) {
    cin.clear();
    cin >> a;
    cout << a;
  }
  cout << n;
  }
}

当我输入1 2 +时。输出将是12.但我希望它是12+。这段代码有什么问题? 它输入1 2 a 5 b 7但是由于某种原因它不能用于+。

3 个答案:

答案 0 :(得分:1)

正在发生的事情是cin >> n正在使用+,因为它可能是有效整数的一部分(例如+5);但随后整数输入失败,因为它后面没有数字。

使用流输入它不能“向前看”,它必须逐个字符地做出决定。这就是strtolstd::stoi等比通过operator>>读取int更可靠的原因。

C ++ 14文本[facet.num.get.virtuals]/3 stage 2指定无效读取应该使用+;但是,由于标准是defective and changes a lot,因此库实现通常不会完全遵循通过operator>>读取数字的标准。因此,您可能会或可能不会发现其他编译器的行为方式不同。

为了完全避免这种情况,我建议采取不同的方法;例如每次读取string,然后进行其他检查,例如std::stoi或其他检查,看看该字符串是否为整数。

答案 1 :(得分:-1)

加号可以通过char解析。

  char ch;
  cin >> ch;

你会得到+ -sign解析。

最后,你想得到:

int a, b
char op;

cin >> a >> b >> op;

之后您可以任意重新排序输出。例如,std::cout << op << " " << a << " " << b

答案 2 :(得分:-1)

更改第7行
int n;

char n;

会解决问题