- ベストアンサー
atoiについての疑問
いつもお世話になっております。 またしても、教えていただきたい事がありまして質問させていただきます。 年月を『YYYY/MM/DD』形式で入力するプログラムで、『YYYY/MM/DD』形式以外の形式や暦として不正な値を入力すると、再度入力を促すプログラムを作成しています。 そこで、「strtok関数」を使い"/"で区切った文字列を「atoi関数」で数値にしようと思いました。(この方法で良いかは分からないのですが、他の方法が思い浮かばなかったので…) そこで、以下のようなプログラムを作ってみたのですが、結果を表示すると、なぜか最後の数字が1文字消えてしまいます。 ↓このようなソースを作りました。 【作ったソース】 #include<stdio.h> #include<stdlib.h> #include<string.h> void manth_view(void) { char nengetu[30],*syear; int year,manth; printf("年月を入力して下さい。>>"); fgets(nengetu,sizeof(nengetu),stdin); syear = strtok(nengetu,"/"); year = atoi(syear); printf("入力された年 %d\n",year); manth=atoi(strtok(NULL,"/")); printf("入力された月 %d\n",manth); } 【結果】入力した年月→2007/12 入力された年 200 入力された月 1 上記の結果のように、どのように入力しても、最後の1文字が消えてしまいます。 何故なのか昨日からずっと考えているのですが、分かりません。 どうか教えてください。
- みんなの回答 (3)
- 専門家の回答
お礼
empuru様 丁寧なご回答をありがとうございます!! #1の方もおっしゃっていたのですが、strtokだけではなくatoiもあまり使わない方が良いのですね。 またしても勉強不足ですが【strtol】知りませんでした・・・。 調べてみると、エラー(数字以外)のチェックもできるのですね。 これは大変便利ですね。 早速ソースを書き直してみます。 とても勉強になりました! どうもありがとうございました。