0で返ってくるのは"0"だけではない。
0で返ってくるけど、元の場合が違う〜といったことがありました。
関数: atoi()
原因: 有効でない文字列を変換しようとすると0を返し、それ以降変換を行わないため
気づいたコーディング状況
数字で入力されているであろう文字入力をint型にしようとして int n = atoi(argv[1]);
を用い、その後n
の値を見て例外処理をしようとしていた。atoi()
には例外処理がなく、数字以外のものを変換しようとすると0
を返すことを忘れてしまっていた。どういうことかと言うと、0,1,2,3,4
等は0,1,2,3,4
で返ってくるが、0,A
は同じ0,0
で返ってきてしまうということである。よって暫定的にASCIIコードを用いて入力判定を実装した。
atoi()の例外処理
atoi()には例外処理がない。if((*argv[1]-'0')!= 0 && n==0)
この部分で、変換文字列の先頭文字が0ではないのに、変換後に0となっている時にエラーを出すコードを記述した。つまり、有効でない文字列で変換後0となってしまう例外を処理している。
atoi()の例外処理
int n = atoi(argv[1]);
if((*argv[1]-'0')!= 0 && n==0){
//先頭文字が0でないのに、atoiで0
printf("引数が数字でありません(error)\n");
exit(1);
}