C++ 使用 istringstream 从 stdin 读取
C++ reading from stdin using istringstream
我试图从键盘调用不同的功能,但由于我缺少 knowledge/experience 和 cin,istringstream etc.Here 是我的简化代码,所以我遇到了一些问题:
#include <iostream>
#include <sstream>
using namespace std;
int main(int argc,char **argv) {
string line;
do {
getline(cin,line);
istringstream iss(line);
string word;
iss >> word;
if (word == "function") {
int id;
if (!(iss >> id)) {
cout << "Not integer.Try again" << endl;
continue;
}
cout << id << endl;
iss >> word;
cout << word << endl;
}
else cout << "No such function found.Try again!" << endl;
} while (!cin.eof());
cout << "Program Terminated" << endl;
return 0;
}
我目前处理的2个问题是:
• 为什么在检查我是否得到一个整数后,do-while 循环在我输入非整数时终止? (例如"function dw25")-不得不使用continue;而不是 break;.Thought break 会退出外部 if-condition.
• 我不想得到id == 25 & word == dwa."function 25dwa" 怎么解决输入"function 25dwa" 时出现的问题。
我认为您可以使用 strtol 来检查 id 是否为整数。
#include <iostream>
#include <sstream>
#include <stdlib.h>
using namespace std;
int main()
{
string word, value;
while ((cin >> word >> value)) {
if (word == "function") {
char* e;
int id = (int) strtol(value.c_str(), &e, 10);
if (*e) {
cout << "Not integer.Try again" << endl;
break;
}
cout << id << endl;
if (!(cin >> word))
break;
cout << word << endl;
} else {
cout << "No such function found.Try again!" << endl;
}
}
cout << "Program Terminated" << endl;
return 0;
}
我试图从键盘调用不同的功能,但由于我缺少 knowledge/experience 和 cin,istringstream etc.Here 是我的简化代码,所以我遇到了一些问题:
#include <iostream>
#include <sstream>
using namespace std;
int main(int argc,char **argv) {
string line;
do {
getline(cin,line);
istringstream iss(line);
string word;
iss >> word;
if (word == "function") {
int id;
if (!(iss >> id)) {
cout << "Not integer.Try again" << endl;
continue;
}
cout << id << endl;
iss >> word;
cout << word << endl;
}
else cout << "No such function found.Try again!" << endl;
} while (!cin.eof());
cout << "Program Terminated" << endl;
return 0;
}
我目前处理的2个问题是:
• 为什么在检查我是否得到一个整数后,do-while 循环在我输入非整数时终止? (例如"function dw25")-不得不使用continue;而不是 break;.Thought break 会退出外部 if-condition.
• 我不想得到id == 25 & word == dwa."function 25dwa" 怎么解决输入"function 25dwa" 时出现的问题。
我认为您可以使用 strtol 来检查 id 是否为整数。
#include <iostream>
#include <sstream>
#include <stdlib.h>
using namespace std;
int main()
{
string word, value;
while ((cin >> word >> value)) {
if (word == "function") {
char* e;
int id = (int) strtol(value.c_str(), &e, 10);
if (*e) {
cout << "Not integer.Try again" << endl;
break;
}
cout << id << endl;
if (!(cin >> word))
break;
cout << word << endl;
} else {
cout << "No such function found.Try again!" << endl;
}
}
cout << "Program Terminated" << endl;
return 0;
}