我才上十年级,有一个练习,我必须得到一个输入,比如(输入=1/2),这个输入需要存储在两个不同的整数中,我不知道怎么做。
感谢任何帮助。
抱歉,如果这个问题听起来很蠢,但这是我第一次在这里发帖,我不知道礼仪。
提前谢谢!
只需使用现有的iostream功能即可。那并不复杂。不需要进行字符串分析。插入器运算符将跳过空格。此外,它还会将给定的值转换为整数变量。斜杠将被读取,检查,然后丢弃。
#include <iostream>
int main() {
int number1{}, number2{};
char slash{};
std::cout << "\nEnter a string: ";
if (std::cin >> number1 >> slash >> number2 && slash == '/') {
std::cout << "\n\nNumber 1: " << number1 << "\nNumber 2: " << number2 << "\n\n";
}
else {
std::cerr << "\nError: invalid input\n\n";
}
return 0;
}
读取两个整数,忽略/匹配它们之间的字符。与角色匹配的最好方法是一个操纵者:
std::istream& slash(std::istream& in) {
if ((in >> std::ws).peek() == '/') {
in.ignore();
}
else {
in.setstate(std::ios_base::failbit);
}
return *this;
}
int main() {
int numerator, denominator;
if (std::cin >> numerator >> slash >> denominator) {
std::cout << " read " << numerator << '/' << denominator << '\n';
}
}
解决方案:
将输入作为std::string
,然后解析它。
完整代码:
#include <iostream>
std::pair<int,int> inputNumbers()
{
std::string input;
std::cout << "Input: ";
std::cin >> input;
size_t slashPos = input.find('/');
if(slashPos == input.npos)
{
std::cout << "Error! Please try again.\n";
exit(0);
}
return {std::stoi(input.substr(0,slashPos)),std::stoi(input.substr(slashPos + 1,input.size()-slashPos-1))};
}
int main() {
std::pair<int,int> inputs = inputNumbers();
std::cout << "First number: " << inputs.first << ". Second number: " << inputs.second << ".\n";
}