0

ユーザーが入力としてコマンドラインに整数または倍精度浮動小数点数を入力するCプログラムがあります。負の数は許可されますが、ユーザーが次のようなものを入力すると問題が発生します。

1-1

1つとして解析されるだけです。ユーザー入力が有効な数値であるかどうかをテストする関数を作成しましたが、そのようなインスタンスをキャッチする方法がわかりません。または、1 + 1、1)2などの入力についても同じことが言えます。

これが私が作成した関数です:

int check_number(char *userInput) {
int i;
//check each character
for (i = 0; userInput[i] != '\0'; i++){
    if (isalpha(userInput[i])){
        printf("Invalid input.\n");
        return -1;
    }
}       
return 0;
}

ユーザー入力の途中で他のランダムな文字(文字はすでにisalphaでテストされているため、文字以外)を許可しないようにするにはどうすればよいですか?

4

2 に答える 2

2

基本的に、最初の文字をマイナスまたは数字(場合によってはピリオド)にし、後続のすべての文字を数字またはピリオドにする必要があります。ただし、期間を数えて、期間が1つしかないことを確認することもできます。科学的記数法も受け入れたい場合は、それに対処する必要があります。

isalphaでないことを確認するのは間違った方法です。許可されている文字を確認する必要があります。

基本的に次のようなものです。

if (*userInput != '-' && !isdigit(*userInput))
  return -1;
int periods = 0;
while (*++userInput != 0) {
  if (*userInput == '.') {
    if (periods >= 1)
      return -1;
    ++periods;
    continue;
  }
  if (!isdigit(*userInput))
    return -1;
}
return 0;
于 2012-09-14T00:40:47.487 に答える
0
if (isdigit(userInput[i]) || userInput[i]=='.') {
  printf("Valid input.\n");
}
else return -1;
于 2012-09-14T00:41:11.697 に答える