限制用户输入8位数字 [英] Restrict user input to 8 digit number

查看:194
本文介绍了限制用户输入8位数字的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我期待有一个用户输入一个8位数的帐号。在code我似乎一切工作,除非你有多个字母,即:BBB为输入。如果出现这种情况,它运行while循环3次,显示printf的,但不能要求另一个输入。

如何解决这个问题,任何输入或更好的方式来做到这一点是值得欢迎的!

现在,我使用的:

 的#include<&stdio.h中GT;诠释的main()
{
INT RETURN_VAL = 0;
INT ACCOUNT_NUMBER = 0;
INT within_range = 0;的printf(请输入您的8位帐号:\\ n);
RETURN_VAL = scanf函数(%d个,&安培; ACCOUNT_NUMBER);
的getchar();
的getchar();如果((ACCOUNT_NUMBER> 9999999)及及(ACCOUNT_NUMBER&下; 99999999))
{
    within_range = 1;
}而((RETURN_VAL!= 1)||(within_range!= 1))
{
    的printf(无效的账户号码账户数必须是8位\\ n);
    的printf(请输入您的8位帐号:\\ n);
    // scanf函数(%d个,&安培;明确);
    RETURN_VAL = scanf函数(%d个,&安培; ACCOUNT_NUMBER);
    的getchar();
    的getchar();    如果((ACCOUNT_NUMBER> 9999999)及及(ACCOUNT_NUMBER&下; 99999999))
    {
        within_range = 1;
    }
}的printf(帐号数:%d,ACCOUNT_NUMBER);
}


解决方案

它会帮助,如果你读取输入的字符的字符串(使用与fgets ),并对其进行解析从那里使用的sscanf ?你将不必担心额外的的getchar 秒。

 的#include<&stdio.h中GT;INT get_acct_num()
{
    焦线[80];
    INT acct_num;
    INT RETURN_VAL = 0;
    的printf(请输入您的8位帐号:\\ n);
    与fgets(行,sizeof的(线),标准输入);
    RETURN_VAL = sscanf的(行,%D,&安培; acct_num);
    如果(RETURN_VAL!= 1)
        返回(0);
    如果((acct_num< 10000000)||(acct_num> 99999999))
        返回(0);    返回(acct_num);
}诠释的main()
{
    INT ACCOUNT_NUMBER = 0;
    而(!(ACCOUNT_NUMBER = get_acct_num()))
        的printf(无效的账户号码账户数必须是8位\\ n);
    的printf(帐号数:%d,ACCOUNT_NUMBER);
}

I am looking to have a user enter an 8 digit account number. The code I have seems to work for everything unless you have multiple letters, i.e.: 'bbb' as an input. If that happens, it runs the while loop 3 times, displaying the printf, but not asking for another input.

Any input on how to fix this, or a better way to do it is welcome!

Right now, I'm using:

#include <stdio.h>

int main()
{
int return_val = 0;
int account_number = 0;
int within_range = 0;

printf("Please enter your 8 digit account number:\n");
return_val = scanf("%d", &account_number);
getchar();
getchar();

if((account_number > 9999999) && (account_number < 99999999))
{
    within_range = 1;
}

while ((return_val != 1) || (within_range != 1))  
{
    printf("Invalid account number. Account number must be 8 digits.\n");
    printf("Please enter your 8 digit account number: \n");
    //scanf("%d", &clear);
    return_val = scanf("%d", &account_number);
    getchar();
    getchar();

    if((account_number > 9999999) && (account_number < 99999999))
    {
        within_range = 1;
    }
}

printf("Account #: %d", account_number);
}

解决方案

Will it help if you read the input as a string of characters (using fgets) and parse it from there using sscanf? You will not have to worry about the extra getchars.

#include <stdio.h>

int get_acct_num()
{
    char line[80];
    int  acct_num;
    int return_val = 0;
    printf("Please enter your 8 digit account number:\n");
    fgets ( line, sizeof ( line ), stdin );
    return_val = sscanf(line, "%d", &acct_num);
    if ( return_val != 1 )
        return ( 0 );
    if ( ( acct_num < 10000000 ) || ( acct_num > 99999999 ) )
        return ( 0 );

    return ( acct_num );
}

int main()
{
    int account_number = 0;
    while ( ! ( account_number = get_acct_num() ) )
        printf("Invalid account number. Account number must be 8 digits.\n");


    printf("Account #: %d", account_number);
}

这篇关于限制用户输入8位数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆