如何强制用户输入正整数?

时间:2012-07-27 16:52:26

标签: c command-line

强制用户输入正整数并将用户置于循环中直到他们这样做。

所以我想要的一切都包括不允许的字符> 0

我尝试了以下内容:

while (i < 0) do { 
    printf("please input a number that's positive"); 
    scanf("%d", i); 
}

4 个答案:

答案 0 :(得分:9)

对于正整数,请使用以下代码

int i;
do 
{ 
  printf("please input a number that's positive"); 
  scanf("%d", &i); 
}while (i < 0); 

c语言不提供用户输入的错误检查。期望用户输入正确的数据类型。例如,如果用户在预期整数值时输入了字符,则程序可能会进入无限循环或异常中止。

答案 1 :(得分:1)

这两个函数都管理数字时,int k是设置的整数,只能设置在20以下,第一个while循环生成一个语句,如果数字大于20,则调用另一个扫描 第二个循环打印一个k * k框。 希望这会有所帮助。

    int main ( )
{
int i, j,k;
printf("Please enter Box size:\n\n");
scanf("%d",&k);
while(k>20){
     printf("Please enter a value below 20\n\n");
     scanf("%d"),&k;
}
while(k<=20)
{
    for (i = 0; i < k; i++)
    {
        printf("\n");
        for (j = 0; j < k; j++)
        {
            printf("#");

        }
    }
     return 0;
}

}

答案 2 :(得分:0)

我会这样做:声明char termint wrong = 0

do {
    printf("Enter a number: ");
    fflush(stdin);
    if (scanf("%d%c", &n, &term) != 2 || term != '\n' || n <= 0) {
        printf("Only positive numbers.\n");
        wrong = 1;
    }
    else {
        wrong = 0;
        //do something here if correct;
    }
} while (wrong);

如果用户输入字符和数字的混合或负数(和零),上面的代码会检测无效输入。

但是,它不会检测用户是否在前面输入了尾随零,后跟有效数字,例如。 00100000738。如果其他人可以解决这个问题,请在下面分享。谢谢! :)

答案 3 :(得分:-1)

这是一个函数的另一种选择,它接受char str[20](例如,可能是20个元素),分析字符串以检查正整数,并返回0或{{1}因此。最后,使用1将该字符串转换为整数。

atoi()

因此该函数只接受1至9,999,999,999,999,999,999的正数(如果int checkPositiveIntegers(char str[]) { char *ptr = str; if (*ptr == '-' || *ptr == '0') //checks for negative numbers or zero return 1; else { do { if (isdigit(*ptr) == 0) { //checks for non-digit at ptr location; isdigit() returns 0 if non-digit return 1; break; } ptr++; } while (*ptr != '\0' && *ptr != '\n'); return 0; //returns 0 if positive integer } } 包含20个元素,则最多19位数。)

但是,如果您将字符串转换回char str[],则可以达到的最大值为2,147,483,647,因为int n = atoi(str);被声明为有符号整数。使用不同的数据类型进行探索。

希望这有帮助! :)