18

Cのメイン関数では:

void main(int argc, char **argv)
{
   // do something here
}

コマンドラインでは、たとえば1または2入力として任意の数値を入力しますが、argv のパラメーターの char 配列として扱われますが、入力が数値であることを確認するにはどうすればよいですか?helloまたはc?

4

10 に答える 10

22

それを行う別の方法は、 isdigit 関数を使用することです。以下はそのコードです。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXINPUT 100
int main()
{
    char input[MAXINPUT] = "";
    int length,i; 

    scanf ("%s", input);
    length = strlen (input);
    for (i=0;i<length; i++)
        if (!isdigit(input[i]))
        {
            printf ("Entered input is not a number\n");
            exit(1);
        }
    printf ("Given input is a number\n");
}
于 2013-06-25T09:24:26.087 に答える
16

strtol()文字配列を long に変換するような関数を使用できます。

適切に変換されなかった最初の文字を検出する方法であるパラメーターがあります。これが文字列の末尾以外の場合は、問題があります。

例として、次のプログラムを参照してください。

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[]) {
    int i;
    long val;
    char *next;

    // Process each argument given.

    for (i = 1; i < argc; i++) {
        // Get value with failure detection.

        val = strtol (argv[i], &next, 10);

        // Check for empty string and characters left after conversion.

        if ((next == argv[i]) || (*next != '\0')) {
            printf ("'%s' is not valid\n", argv[i]);
        } else {
            printf ("'%s' gives %ld\n", argv[i], val);
        }
    }

    return 0;
}

これを実行すると、動作していることがわかります。

pax> testprog hello "" 42 12.2 77x

'hello' is not valid
'' is not valid
'42' gives 42
'12.2' is not valid
'77x' is not valid
于 2013-06-25T08:28:39.127 に答える
7

使い方scanfはとても簡単です。これは例です:

if (scanf("%d", &val_a_tester) == 1) {
    ... // it's an integer
}
于 2013-06-25T08:32:09.443 に答える
5

自作の解決策:

bool isNumeric(const char *str) 
{
    while(*str != '\0')
    {
        if(*str < '0' || *str > '9')
            return false;
        str++;
    }
    return true;
}

このソリューションには厳しい制限があるため、本番コードでは使用しないでください。しかし、私はC-Strings と ASCIIを理解するのが好きです。

于 2013-06-25T08:33:10.803 に答える
0

これは私のために働く

#include <string.h>

int isNumber(char *n) {

  int i = strlen(n);
  int isnum = (i>0);
  while (i-- && isnum) {
    if (!(n[i] >= '0' && n[i] <= '9')) {
      isnum = 0;
    }
  }
  return isnum;
}

例えば:

printf("%i\n", isNumber("12"));   // 1
printf("%i\n", isNumber("033"));  // 1
printf("%i\n", isNumber("0"));    // 1
printf("%i\n", isNumber(""));     // 0
printf("%i\n", isNumber("aaa"));  // 0
printf("%i\n", isNumber("\n"));   // 0
printf("%i\n", isNumber("a0\n")); // 0
于 2021-05-19T13:55:17.507 に答える