#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但是由于某种原因它不能用于+。
答案 0 :(得分:1)
正在发生的事情是cin >> n
正在使用+
,因为它可能是有效整数的一部分(例如+5
);但随后整数输入失败,因为它后面没有数字。
使用流输入它不能“向前看”,它必须逐个字符地做出决定。这就是strtol
或std::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;
会解决问题