オンライン健康相談、gooドクター

下記のソースコードを用いて変数入力の際、文字などをいれたときエラーになるようなプログラミングを作りました。まだC言語をある程度使えるようになったくらいなのでこのソースコードを完璧には理解できていません。自分が意味を分かっていなくても、ちゃんと動作するというのは自分では受け入れることができないのでしっかりと理解したいです。ですので、どなたかご説明いただけると幸いです。





char buff[ 256 ];
char *argp;
int value;

// 文字列で入力
scanf( "%s", buff );
value = strtol( buff, &argp, 10 ); ←10進数で変換

// ここでチェック
if ( (errno != ERANGE) && (*argp != '\0') ){
 printf( "変換不可能な文字が入力されています。\n" );
 exit( 1 );
}

質問者からの補足コメント

  • 文字などはわかりにくかったですね。数字以外ではどうでしょうか。

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/01/06 11:17
  • ①はこのソースコードには書いてなかったです。すみません。
    ②オーバーフローでないことの確認のことではないのですか?

    No.4の回答に寄せられた補足コメントです。 補足日時:2021/01/06 19:18
gooドクター

A 回答 (4件)

①errorno は関数を呼び出す前に 0 でクリアすること。


②ERANGEエラーがチェックされてないけど、よいの?
この回答への補足あり
    • good
    • 0

「文字などをいれたときエラーになる」というのがあいまい (「文字など」の「など」ってなに?) なのでなんともいいにくいんだが.



errno が ERANGE だと *argp はチェックせず素通しになるように見えるんだけど, 気のせい?
この回答への補足あり
    • good
    • 1

突然errnoが出てきてビックリ

    • good
    • 0

各コマンドの使い方を詳しく調べるようにしましょう。



「このコマンドでは、こういう使い方ができる」
ということを学べば良いのです。

逆にそれができないなら、発展させることはできません。
教えてもらったことだけでプログラムを組むことしかできない ”使い物にならない” 人になり下がります。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
確かに広すぎる目線で見ていたかもしれません。局所ごとのコマンドについて調べはしたのですが、いかんせん大学の授業内容とは違ってさらにわからない用法を用いた例題ばかりで苦戦していました。もっと色々と自分で探してみます。

お礼日時:2021/01/05 18:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング