C++ 整数输入仅限于四位数字

C++ 整数输入仅限于四位数字,c++,input,C++,Input,我正在做一个问题,它要求输入一个帐号,它只由四位数字组成。这必须用初学C++的初学者来完成。 我需要找出一种方法,将整数的输入限制为四位数。用户应该能够输入0043、9023或0001,并且应该是一个可接受的值 我想我知道如何用一根绳子来完成它。。。。获取行(cin,输入),然后检查input.length()是否=4 但我甚至不知道如何使用整数输入。请注意,如果0043与43不同,那么输入实际上不是一个数字,而是一个数字字符串,就像电话“号码” 将该行作为字符串读取输入 检查输入的长度是否为4

我正在做一个问题,它要求输入一个帐号,它只由四位数字组成。这必须用初学C++的初学者来完成。 我需要找出一种方法,将整数的输入限制为四位数。用户应该能够输入0043、9023或0001,并且应该是一个可接受的值

我想我知道如何用一根绳子来完成它。。。。获取行(cin,输入),然后检查input.length()是否=4


但我甚至不知道如何使用整数输入。请注意,如果
0043
43
不同,那么输入实际上不是一个数字,而是一个数字字符串,就像电话“号码”

将该行作为字符串读取
输入

检查
输入的长度是否为
4

检查字符串中的每个字符是否
=“0”

比如:

std::string read4DigitStringFromConsole()
{
    bool ok = false;
    std::string result;
    while (!ok)
    {
        std::cin >> result;
        if (result.length() == 4)
        {
            bool allDigits = true;
            for(unsigned index = 0; index < 4; ++index)
            {
                allDigits = allDigits && ( 
                    (result[index] >= '0') && 
                    (result[index] <='9') 
                    );
            }
            ok = allDigits;
        }
    }
    return result;
}
std::string read4DigitStringFromConsole()
{
bool ok=false;
std::字符串结果;
而(!ok)
{
标准::cin>>结果;
if(result.length()==4)
{
bool-allDigits=true;
for(无符号索引=0;索引<4;++索引)
{
所有数字=所有数字&&(
(结果[索引]>='0')&&

(result[index]我喜欢你使用
字符串作为输入的想法。这很有意义,因为帐户“编号”只是一个标识符。你不在计算中使用它。通过
if(sizeof(input)==4)
我想你是在检查
字符串的长度。正确的方法是
if(input.length()==4)
。这将检查用户是否输入了4个字符。现在,您需要确保每个字符也是一个数字。您可以利用数字字符的ASCII码按预期顺序排列的事实轻松做到这一点。因此
if(input[i]>='0'&&input[i]类似的功能应该可以使用。一旦用户输入的内容正好包含四个字符,您就可以对其进行验证。其余的逻辑由您决定

#include <iostream>
#include <string>

int main() {
    std::cout << "Enter a PIN Number: ";
    std::string pinStr;
    while(std::getline(std::cin,pinStr) && pinStr.size() != 4) {
        std::cout << "Please enter a valid value\n";
    }
}
您可以看到它正在运行

//通用解决方案
整数位数(整数)
{
整数位数=0;
if(number<0)digits=1;//如果“-”算作数字,则删除此行
while(数字){
数目/=10;
数字++;
}
返回数字;
}
与此类似。
然后,您可以调用此函数检查输入是否为4位数字。

您可能希望代码响应用户输入,因此我建议一次获取每个字符,而不是读取字符串:

std::string fourDigits;
char currentDigit;

std::cout << "Enter 4 digits\n";
for(int i = 0; i < 4; ++i)
{
    currentDigit = getch();
    if(isdigit(currentDigit))
    {
        fourDigits += currentDigit;
        std::cout << currentDigit; // getch won't display the input, if it was a PIN you could simply std::cout << "*";
    }
    else
    {
            // Here we reset the whole thing and let the user know he entered an invalid value
        i = 0;
        fourDigits = "";
        std::cout << "Please enter only numeric values, enter 4 digits\n";
    }
}

std::cout << "\nThe four digits: " << fourDigits.c_str();
std::字符串四位数;
字符位;

std::cout所以我研究了如何使用整数类型来获取输入,并研究了char…因为从技术上讲,它是最小的整数类型,可以用来获取代码…我能够想到这一点,但它肯定还没有完善(我不确定是否可以):


因此,循环一直持续到收集到4个字符。理论上应该是这样。但它不起作用。它将在2位、5位等处停止…我认为这可能是cin.get()的本质抓取空白,不确定。

输入字符串并转换为int。或者检查a>=1000&&a是否将输入读取为
int
或带有数字字符的
std::string
?@Karthik T a>=1000&&aa@user2006048如果问题是您必须将其作为
int
读入,则无法知道用户是否nput
43
043
0043
因为前导0被删除。显然前两个是无效的输入。@马龙哈哈,我完全错过了。谢谢你解释否决票。@Marlon我修正了它。所以撤销将非常感谢;-)啊,是的,我也搞错了。string.length()而不是sizeof()谢谢,我将避开输入[I]选项,因为这是一个数组,除非我弄错了,我们没有讨论这些yet@user2006048您可以将数组表示法与字符串一起使用。或者,您可以使用
input.at(i)
。虽然这可能“起作用”,但无效的输入只会让用户陷入无限的“输入模式”直到他弄明白如何最终满足“ok”是的,就字符串而言,这几乎就是我所拥有的。我想我被一个字符串卡住了。哦,好吧,我希望他接受它。我的意思是…我们没有做过任何事情表明我可以用任何其他方式来做。我可以做一个while循环,在我有四个字符之前一直阅读字符,但我不确定这是否有效。@user2006048您是否检查了我的编辑?它向您展示了一种以整数形式存储它的方法,方法是将它保存在整数数组中。这样
0000
是有效的。是的,很遗憾,我还不能使用数组。不过,谢谢。我想我只使用好的ol'字符串和length().这是一个很棒的解决方案,但是,我必须包括conio.h和1。我无法让它与NetBeans一起工作(以前尝试过)…2.我们没有这个标题,所以我不想在这个作业中弄乱它…不过谢谢。这太糟糕了,因为用
std::cin
缓冲输入的方式对于这类事情来说真的很烦人,在输入新行之前不可能有任何反馈。这适用于任何使用数字的东西,例如1234…但是,如果没有他的帐号是0001,它将显示数字的个数为1。我想简单地说,我会用字符串,并祈祷他接受它,我只是不知道任何基本形式的C++,它会做。这意味着,你正在检查一个字符数组(字符串)是否是一个四位数的数字字符串?
// generic solution
int numDigits(int number)
{
    int digits = 0;
    if (number < 0) digits = 1; // remove this line if '-' counts as a digit
    while (number) {
        number /= 10;
        digits++;
    }
    return digits;
}
std::string fourDigits;
char currentDigit;

std::cout << "Enter 4 digits\n";
for(int i = 0; i < 4; ++i)
{
    currentDigit = getch();
    if(isdigit(currentDigit))
    {
        fourDigits += currentDigit;
        std::cout << currentDigit; // getch won't display the input, if it was a PIN you could simply std::cout << "*";
    }
    else
    {
            // Here we reset the whole thing and let the user know he entered an invalid value
        i = 0;
        fourDigits = "";
        std::cout << "Please enter only numeric values, enter 4 digits\n";
    }
}

std::cout << "\nThe four digits: " << fourDigits.c_str();
int main() {
    int count=0;

    while(!(count==4)){
        char digit;
        cin.get(digit);
        count++;
    }

    return 0;
}