ユーザーに正の整数の入力を強制し、入力するまでユーザーをループに入れます。
だから私は許可されていない文字を含むすべてが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 言語は、ユーザー入力のエラー チェックを提供しません。ユーザーは正しいデータ型を入力する必要があります。たとえば、整数値が期待されているときにユーザーが文字を入力した場合、プログラムは無限ループに入るか異常終了する可能性があります。
私はこれを行います:宣言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
。他の誰かがこれを理解できる場合は、以下で共有してください。ありがとう!:)
char str[20]
a (おそらく 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
}
}
したがって、関数は 1 から 9,999,999,999,999,999,999 までの正の数のみを受け入れます ( char str[]
20 要素を保持する場合は最大 19 桁)。
ただし、文字列を に戻すと、は符号付き整数として宣言されているint n = atoi(str);
ため、到達できる最大値は 2,147,483,647 になります。n
探索のためにさまざまなデータ型を試してみてください。
お役に立てれば!:)