我正在学习C ++,这是我的代码:
int val1,val2;
char op;
cout << "Please enter a calculation (operand operator operand):";
cin >> val1 >> op >> val2;
if((val1<0||val1>9)||(val2<0||val2>9)) {
cout << "Operand must be between 0 and 10!" << endl;
}
cout << "val1: " << val1 << " val2: " << val2 << endl;
验证有效,但如果我输入例如34 + 56,我仍然不仅在变量val1或val2中有一个数字。
我想最终得到一个2位数或更多位数的错误消息,我想在变量val1和val2中只有一位数。
我尝试使用字符,字符串和isdigit(),但我仍然在黑暗中。谢谢你的帮助!!
答案 0 :(得分:0)
#include <iostream>
#include <string>
int main(){
int x = 100;
std::cout << std::to_string(x)[0] - '0';
}
好的,没关系。数字的第一个数字。我有c ++ 11解决方案。
编译时添加编译器标志-std=c++11
答案 1 :(得分:0)
首先,我建议单独输入您的输入,因为这会大大降低代码的复杂性。
您遇到的问题是,在单独阅读时,您在编写34+56
和处理3次时,所有输入都一次 34 + 56
(因为空间)。
因此,您需要做的是阅读整行:
std::cout << "Please enter a calculation:";
std::string str;
std::getline (std::cin, str);
然后,您需要找到符号并将字符串分割到那里:
// "34+56"
std::size_t index = str.find_first_of("+-/*"); // returns the index 2
std::string operand1 = str.substr(0, index); // "34"
std::string operand2 = str.substr(index + 1); // "56"
最后,您可以输出
对于数字的错误消息,该数字具有2位或更多位数且在变量val1和val2中只有一位数。
// converts string -> int
int val1 = atoi(operand1.c_str());
int val2 = atoi(operand1.c_str());
// check if in range
if( (val1<0||val1>9) || (val2<0||val2>9) ) {
std::cout << "Operand must be between 0 and 10!" << std::endl;
std::cout << "Using first digit of operands..." << std::endl;
//Edit(wrong operation): Use the leftmost character minus character '0'
val1 = operand1[0] - '0';
val2 = operand2[0] - '0';
}
注意:我实际上没有对此进行测试。在许多情况下,这将失败(即有多个操作)。您还可以争辩说找到第一个有效字符并保存它更有效,但我发现将整个操作数提取为字符串更清晰。
答案 2 :(得分:0)
解决这个问题:
while(true) {
cout << "Please enter a calculation (operand operator operand):" << endl;
while(true) {
cin >> val1 >> op >> val2;
if((val1<0||val1>9)||(val2<0||val2>9)) {
cout << "Wrong input! Try again." << endl;
break;
}
cout << "val1: " << val1 << " val2: " << val2 << endl;
}
}
似乎是最明显的解决方案。 Thxalot !!