整数输入仅限于四位数

时间:2013-01-25 02:29:07

标签: c++ input

我在问一个问题,就是要求输入一个只包含四位数的帐号。这必须使用基本的初学者C ++来完成。

我需要找出一种方法来将整数输入限制为四位数。用户应该能够输入0043或9023或0001,它应该是可接受的值....

我想我知道如何使用字符串.... getline(cin,input)来完成它,然后检查input.length()== 4?

但我不知道如何用整数输入做到这一点。

7 个答案:

答案 0 :(得分:2)

请注意,如果004343不同,则输入 实际上不是数字,而是数字字符串,就像电话“号”。

以字符串input读取该行。

检查input的长度是否为4

检查字符串中的每个字符是<= '9'还是>= '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;
}

答案 1 :(得分:1)

我喜欢您使用string作为输入。这是有道理的,因为帐号“号”只是一个标识符。你不要在计算中使用它。到if (sizeof(input)==4)我认为您正在尝试检查string的长度。正确的方法是if (input.length() == 4)。这将检查用户输入4 字符。现在你需要确保每个字符也是一个数字。您可以通过利用数字字符的ASCII代码按预期排序这一事实轻松地完成此操作。所以if (input[i] >= '0' && input[i] <= '9')将为索引i提供适当的for循环。此外,您可能需要某种循环继续请求输入,直到用户输入被认为是正确的内容。

修改

作为检查每个字符是否为数字的替代方法,您可以尝试将字符串转换为int int value = atoi(input.c_str());。然后,您可以轻松检查int是否是一个四位或更少的数字。

答案 2 :(得分:1)

这样的事情应该有效。一旦用户输入了具有四个字符的内容,您就可以对其进行验证。其余的逻辑取决于你。

#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";
    }
}

如果您想以整数形式存储它,将整数保存在std::vector中可能会有所帮助。您可以轻松完成此操作(循环展开是为了清晰起见):

#include <iostream>
#include <string>
#include <vector>

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";
    }
    std::vector<int> pin;
    pin[0] = pinStr[0] - '0';
    pin[1] = pinStr[1] - '0';
    pin[2] = pinStr[2] - '0';
    pin[3] = pinStr[3] - '0';

    //pin now holds the integer value.
    for(auto& i : pin)
        std::cout << i << ' ';
}

您可以看到它正在运行here

答案 3 :(得分:0)

// 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;
}

与此post类似。 然后你可以调用这个函数来检查输入是否是4位数。

答案 4 :(得分:0)

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

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();

这样你就可以立即处理优雅无效的角色。使用字符串时,只有在用户点击Enter时才会验证输入。

答案 5 :(得分:0)

所以我正在讨论如何使用整数类型来获取输入,并查看char ...因为它在技术上是最小的整数类型,它可以用于获取代码...我能够想出这个,但它肯定还没有完善(我不确定它是否可以):

int main() {
    int count=0;

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

    return 0;
}

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

答案 6 :(得分:0)

unsigned char pin[4],i;
printf("Enter Pin : ");
for(i=0;i<=3;i++){
    pin[i]=getch();
    printf("%c",pin[i]);
}