Cのメイン関数では:
void main(int argc, char **argv)
{
// do something here
}
コマンドラインでは、たとえば1
または2
入力として任意の数値を入力しますが、argv のパラメーターの char 配列として扱われますが、入力が数値であることを確認するにはどうすればよいですか?hello
またはc
?
それを行う別の方法は、 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");
}
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
使い方scanf
はとても簡単です。これは例です:
if (scanf("%d", &val_a_tester) == 1) {
... // it's an integer
}
自作の解決策:
bool isNumeric(const char *str)
{
while(*str != '\0')
{
if(*str < '0' || *str > '9')
return false;
str++;
}
return true;
}
このソリューションには厳しい制限があるため、本番コードでは使用しないでください。しかし、私はC-Strings と ASCIIを理解するのが好きです。
これは私のために働く
#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