4

强制用户输入一个正整数并将用户置于循环中,直到他们输入。

所以我想要所有内容,包括不允许超过 > 0 的字符

我尝试了以下方法:

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

4 回答 4

10

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

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

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

于 2012-07-27T17:24:44.990 回答
1

这两个 while 函数都管理数字,int k 是设置的整数,只能设置为 20 以下,第一个 while 循环发出一个语句,如果数字大于 20,则调用另一个扫描,第二个循环打印 ak* 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;
}

}
于 2017-03-02T19:26:08.083 回答
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。如果其他人可以解决这个问题,请在下面分享。谢谢!:)

于 2014-03-06T15:24:06.377 回答
-1

这是另一个函数的替代方案,它接受 a char str[20](比如说,可能是 20 个元素),分析字符串以检查正整数,并相应地返回 a01。最后,使用 . 将该字符串转换为整数atoi()

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

char str[]所以该函数只接受从 1 到 9,999,999,999,999,999,999 的正数(如果包含 20 个元素,则最多 19 位)。

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

希望这可以帮助!:)

于 2014-03-06T21:43:47.663 回答