强制用户输入正整数并将用户置于循环中直到他们这样做。
所以我想要的一切都包括不允许的字符> 0
我尝试了以下内容:
while (i < 0) do {
printf("please input a number that's positive");
scanf("%d", i);
}
答案 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 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
。如果其他人可以解决这个问题,请在下面分享。谢谢! :)
答案 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);
被声明为有符号整数。使用不同的数据类型进行探索。
希望这有帮助! :)