質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1247閲覧

scanfのエラー検出について

RaitoN

総合スコア72

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/03/06 01:22

###入力エラーを検出したい
正の整数以外の入力があった時,エラー処理を行いたいのですが,scanfで1つの数字の場合は次のようにコードを書きました.

C

1#include <stdio.h> 2#include <stdlib.h> 3 4int main(int argc, const char * argv[]) { 5 6 char buf[10]; 7 int num; 8 9 printf("正の整数を入力\n"); 10 scanf("%s", buf); 11 num = atoi(buf); 12 if (num <= 0) return 1; 13 14 return 0; 15}

scanfで読み取る時,例えばカンマ区切りで読んだ時,エラー処理はどのように行うのが良いですか?

C

1int a, b; 2scanf("%s,%s", a, b);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

izmktr

2019/03/06 01:36

何処で躓いているのかわからないんですが… 最初のコードを自分で書いたのなら躓くポイントはないと思うんですよね? ところで、最初はchar buf[10]になっているのに、int a,b に変わってますが、char [10]とintの区別はついていますか?
RaitoN

2019/03/06 03:37

カンマ区切りの文字列(数字を含む)ものを読むとき,atoiで1つ目はよめるのですが2つ目の数字を読むのはどうしたらいいのかなと思って質問しました.
guest

回答2

0

エラーをどうやって検知するかと言う事でしょうか?
scanfの返り値は、正常に入力できた項目数なので、それを見ればわかります。

scanfだと、想定外の入力があったときの処理が難しいので、fgets+sscanfがいいです。

あと、いろいろおかしいです。

C

1char buf[10]; 2scanf("%s", buf);

10文字以上入力されたらどうなると思いますか?

C

1int a, b; 2scanf("%s,%s", a, b);

整数入力なら、

C

1int a, b; 2scanf("%d,%d", &a, &b);

ですね。

投稿2019/03/06 01:34

otn

総合スコア84380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RaitoN

2019/03/06 03:35

ありがとうございます.
guest

0

ベストアンサー

fgetssscanfを使うのが定番です。

char buf[50]; int a, b; fgets(buf, 50, stdin); // 正しく読めればcount=2、そうでなければ1以下あるいはEOF int count = sscanf(buf, "%d,%d", &a, &b);

なお、scanf("%s")は文字数制限がないのでバッファオーバーフローを引き起こします。何らかの方法で文字数制限をかけることが必要です。

投稿2019/03/06 01:35

maisumakun

総合スコア145064

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RaitoN

2019/03/06 03:36

scanfはあまり使わないのですね.ありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問