例如:
int input;
cout << "Please enter how many burgers you'd like" << endl;
cin >> input;
缩短'输入'并且只接受前两个位数字的最简单方法是什么。
继续这个例子:
用户输入:432534。 输入值:43。
用户输入:12342342341234123412341235450596459863045896045。 输入值:12。
(编辑:说'数字'而不是'位')
答案 0 :(得分:4)
我认为std::string
操作可以让你回家。
std::string inputstr;
cout << "Please enter how many burgers you'd like" << endl;
cin >> inputstr;
inputstr = inputstr.substr(0, 2);
int input
input = std::stoi(inputstr); // C++11
input = atoi(inputstr.cstr()); // pre-C++11
文档:
http://en.cppreference.com/w/cpp/string/basic_string/stol
http://en.cppreference.com/w/cpp/string/byte/atoi
答案 1 :(得分:3)
读取前两位数字并形成一个整数:
int digit1 = std::cin.get() - '0';
int digit2 = std::cin.get() - '0';
int input = digit1 * 10 + digit2;
然后丢弃输入的其余部分:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
要处理负号,您可以执行以下操作:
int input = 1;
int digit1 = std::cin.get();
if (digit1 == '-') {
input = -1;
digit1 = std::cin.get();
}
digit1 -= '0';
int digit2 = std::cin.get() - '0';
input *= (digit1 * 10) + digit2;
如下所述,如果用户输入除两个数字之外的任何内容作为前两个字符,则不起作用。这很容易通过阅读和使用std::isdigit
进行检查来检查。这取决于你继续前进或抛出某种错误。
如果用户仅输入一位数,这也不起作用。如果你需要它也可以工作,你可以读取整个字符串并使用它的大小或检查EOF。
输入操作本身也没有错误检查,但应该有实际代码。
答案 2 :(得分:0)
将input
作为字符串,将前两个字符转换为int
#include <sstream>
#include <string>
#include<iostream>
int main()
{
std::string input ;
std::cin>>input;
std::stringstream iss(input.substr(0,2));
int num;
iss >> num;
std::cout<<num;
}
答案 3 :(得分:0)
int i;
cin >> i;
while (i >= 100 || i <= -100) {
i = i / 10; // remove and ignore the last digit
}
由于整数溢出,这对于非常大的数字不起作用。我只是把它作为一个非常简单的算法。
答案 4 :(得分:0)
读取一个字符串并提取前两个字符:
std::string input;
cout << "Please enter how many burgers you'd like" << endl;
cin >> input;
int first2;
if (input.size()>=1)
{
if (input[0] == '-')
std::cerr << "Negative num of burgers";
else
first2 = atoi(input.substr(0,2).c_str());
}
else
std::cout << "Null number";
答案 5 :(得分:0)
我认为这种方法很容易理解。
int input;
cout << "Please enter how many burgers you'd like" << endl;
cin >> input;
char cTemp[50];
itoa(input, cTemp, 10);
char cResult[3] = {cTemp[0], cTemp[1], '\0'};
int output = atoi(cResult);
答案 6 :(得分:0)
我很惊讶没人提到fscanf
。虽然C ++纯粹主义者可能会反对,但在这种情况下,这需要比cin
少得多的代码(并且实质上更好的错误检查)。
int res = 0;
std::cout << "Please enter how many burgers you'd like" << std::endl;
if (fscanf(stdin, "%02d", &res) != 1) {
std::cerr << "Invalid Input" << std::endl;
}
int c;
do {
c = fgetc(stdin);
} while (c != '\n' && c != EOF);
std::cout << "Got " << res << std::endl;
答案 7 :(得分:-3)
让我通过为你重写来回答这个问题:
如何从标准输入读取字符串并将前2个字符写入标准输出?