1
#include "stdafx.h"
#include <stdlib.h>

void main()
{
    char buffer[20];
    int num;

    printf("Please enter a number\n");
    fgets(buffer, 20, stdin);
    num = atoi(buffer);

    if(num == '\0')
    {
        printf("Error Message!");
    }

    else
    {
        printf("\n\nThe number entered is %d", num);
    }

    getchar();
}

上記のコードは、文字列形式の数値を受け入れ、atoiを使用して整数に変換します。ユーザーが10進数を入力すると、10進数の前のビットのみが受け入れられます。さらに、ユーザーが文字を入力すると、0が返されます。

今、私は2つのクエリを持っています:

i)ユーザーが小数点付きの数値を入力したかどうかをプログラムで検出し、エラーメッセージを出力したい。小数点以下の部分は入れたくないです。入力が無効であることを認識してもらいたい。

ii)文字がある場合にatoiが0を返す場合、ユーザーは数字の0も入力できるので、どうすればそれを検証できますか?

ありがとう。

4

2 に答える 2

7

atoiエラーチェックには適していません。strtolまたはのstrtoul代わりに使用してください。

#include <errno.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>

long int result;
char *pend;

errno = 0;
result = strtol (buffer, &pend, 10);

if (result == LONG_MIN && errno != 0) 
{
  /* Underflow. */
}

if (result == LONG_MAX && errno != 0) 
{
  /* Overflow. */
}

if (*pend != '\0') 
{
    /* Integer followed by some stuff (floating-point number for instance). */
}
于 2013-03-05T16:46:03.393 に答える
0

isdigit各文字を確認するのに役立つ機能があります。

#include <ctype.h>

/* ... */

for (i=0; buffer[i]; i++) {
        if (!isdigit(buffer[i])) {
            printf("Bad\n");
            break;
        }
}   
于 2014-08-11T06:57:54.590 に答える