我希望能够阅读以下内容:
myvar = { 1 2 3 5 }
所以我所做的就是
string input;
int intInput;
cin >> input; //take in the varname, do stuff
cin >> input; // check to make sure it's "="
if (input != "=") {
//stuff
}
cin >> input; //check to make sure it's "{"
if (input != "{") {
//stuff
}
while (cin >> intInput) {
//stuff
cout << intInput << endl;
}
此时,我的理解是“}”字符已存储到intInput中,结束了while循环。我想确保它以“}”结尾。
c.unget();
cin >> input;
if (input != "}") {
//stuff
}
我认为是c.unget();会给我最后一个字符,在这种情况下是“}”,但当我输入输入值时输入仍为“{”。
如何确保设置以“}”字符结尾?
答案 0 :(得分:2)
如果你输入cout,你会得到一个“{”因为它是这里读到的最后一个字符串:
cin >> input; //check to make sure it's "{"
然后你将你的数字放入intInput。您可以在整个时间内使用字符串读取输入,如果不等于“}”则将其转换为整数
#include <cstdlib>
while (cin >> input) {
if(input == "}")
break;
else
intInput = atoi(input.c_str()); //or whatever means you prefer to convert a string to int
cout << intInput << endl;
}
如果读取“}”,它就会突破你的循环。
答案 1 :(得分:1)
#include <iostream>
#include <sstream>
using namespace std;
int main() {
string name, buf;
cin >> name;
cin >> buf; // =
cin >> buf; // {
while(1) {
if(cin >> buf) {
if(buf == "}") break;
stringstream ss(buf);
int i;
ss >> i;
if(ss.fail()) {
cout << "fail" << endl;
//conversion error
} else {
cout << i << endl;
}
} else {
cout << "no }" << endl;
break;
//only if cin is reading from file, or wating for CTRL+D from terminal emulator
}
}
}
答案 2 :(得分:1)
检查出来:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int i;
string input;
while (cin >> input)
{
if (input == "}")
break;
else
stringstream(input) >> i;
cout << i << endl;
}
}
答案 3 :(得分:0)
我读到std :: string并检查它是数字还是“}”符号
while (cin >> stringInput) {
if (stringInput = "}") {
break;
}
if (sscanf(stringInput.c_str(), "%d", &intInput) == 0) {
//stuff
}
}
尽管
使用/写一个词法分析器可能更好答案 4 :(得分:0)
如果缓冲区不是数字,缓冲区仍将包含用户输入的字符。它只会设置失败标志。然后再读一遍字符串:
string input;
int intInput;
cin >> input; //take in the varname, do stuff
cin >> input; // check to make sure it's "="
if (input != "=") {
//stuff
}
cin >> input; //check to make sure it's "{"
if (input != "{") {
//stuff
}
do {
cin >> int;
if (!cin) {
cin.clear(); // clear error flags
cin >> input; // read again as string
if (input != "}") {
// handle error
}
}
else
cout << intInput << endl;
} while (input != "}");