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