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 に答える
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。他の誰かがこれを理解できる場合は、以下で共有してください。ありがとう!:)

于 2014-03-06T15:24:06.377 に答える
-1

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探索のためにさまざまなデータ型を試してみてください。

お役に立てれば!:)

于 2014-03-06T21:43:47.663 に答える