C++ 使用标准输入c+;将整数读入int,将字符串读入字符串+; #包括 #包括 使用名称空间std; int main(){ while(true){ int n; 字符串a; cin>>n; if(cin.eof()) {break;} 如果(!cin){ cin.clear(); cin>>a; cout

C++ 使用标准输入c+;将整数读入int,将字符串读入字符串+; #包括 #包括 使用名称空间std; int main(){ while(true){ int n; 字符串a; cin>>n; if(cin.eof()) {break;} 如果(!cin){ cin.clear(); cin>>a; cout,c++,C++,加号可以通过char解析 #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 <<

加号可以通过char解析

#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;
  }
}
您将解析+符号

最后,您可能希望得到:

  char ch;
  cin >> ch;
之后,您可以任意对输出进行重新排序。例如,
std::cout将第7行从

int a, b
char op;

cin >> a >> b >> op;


将解决问题

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

对于流输入,它不能“向前看”,它必须逐个字符做出决定。这就是为什么
strtol
std::stoi
等比通过
操作符>
读取int更可靠的原因

C++14文本
[facet.num.get.virtuals]/3阶段2
指定无效读取应该使用
+
;但是库实现通常不完全遵循通过
操作符>
读取数字的标准,因为该标准是。因此,您可能会发现,也可能不会发现其他编译器的行为有所不同


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

请提供一些您想要处理的输入数据,并且失败的情况。不是吗?我说我想要输入1 2+b但是输出总是12而不是12+,这是我想要的。对不起,我有点感觉是的。你想解析一个修改过的波兰语符号吗?顺便说一句,你不应该做
cout>n
失败。如果(cin>>n)放
更清楚cout>a;cout-Oh是的,我在上面添加了else,你的意思是,把所有内容都作为单个字符来读取,而不是像OP所希望的那样作为整数和字符串来读取吗?这会有什么帮助?这将修复这个特殊的测试用例;但问题意味着它应该读取整数和字符串的一般序列,而不仅仅是
12+
int n;
char n;