强制用户输入一个正整数并将用户置于循环中,直到他们输入。
所以我想要所有内容,包括不允许超过 > 0 的字符
我尝试了以下方法:
while (i < 0) do {
printf("please input a number that's positive");
scanf("%d", i);
}
强制用户输入一个正整数并将用户置于循环中,直到他们输入。
所以我想要所有内容,包括不允许超过 > 0 的字符
我尝试了以下方法:
while (i < 0) do {
printf("please input a number that's positive");
scanf("%d", i);
}
对于正整数,使用以下代码
int i;
do
{
printf("please input a number that's positive");
scanf("%d", &i);
}while (i < 0);
c 语言不提供对用户输入的错误检查。用户应输入正确的数据类型。例如,如果用户在预期整数值时输入了字符,则程序可能会进入无限循环或异常中止。
这两个 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;
}
}
我会这样做:声明char term
和int 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);
如果用户混合输入了字符和数字或负数(和零),上面的代码将检测到无效输入。
但是,它不会检测用户是否在前面输入了尾随零,然后是有效数字,例如。001
或00000738
。如果其他人可以解决这个问题,请在下面分享。谢谢!:)
这是另一个函数的替代方案,它接受 a char str[20]
(比如说,可能是 20 个元素),分析字符串以检查正整数,并相应地返回 a0
或1
。最后,使用 . 将该字符串转换为整数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
它被声明为有符号整数。使用不同的数据类型进行探索。
希望这可以帮助!:)