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

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

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

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

Q&A

解決済

2回答

41354閲覧

forループの中にscanf関数があり、何も入力せずEnterキーを押すとforループを抜けるようにするにはどうすればよいでしょうか

tada_tadaa

総合スコア111

C

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

0グッド

0クリップ

投稿2016/02/26 07:24

C言語でscanf関数を使って数値を入力しているのですが、何も入力
せずEnterキーを押せば、for文を抜けて入力を終了するようにした
いです。しかし、どういうプログラム文を書けばEnterキーでfor文
を抜けれるのか分かりません。何かいい方法はないものでしょうか?
どなたかご存知の方がいれば教えていただければと思います。
よろしくお願いいたします。

c

1#include <stdio.h> 2 3int main(void) 4{ 5 int i; 6 int num[100]; 7 8 for (i = 0; i < 100; i++) { 9 10 //何も入力せずEnterキーが押されるとforループを抜けるようにしたい 11 scanf("%d", &num[i]); 12 if(num[i]=='\n') break; //これではforループは抜けない 13 } 14 15 printf("Hello, world\n"); 16 return 0; 17}

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

scanf()で数値を読む時、数値が入力されるまでscanfから返ってこないようです。
ですので、scanf()ではご希望の仕様はちょっと無理っぽいです。
代わりに下記では如何でしょうか?

C

1#include <stdio.h> 2 3int main (void) 4{ 5 int i; 6 int num[100]; 7 8 for (i = 0; i < 100; i++) { 9 10 //何も入力せずEnterキーが押されるとforループを抜けるようにしたい 11 char buff[100]; 12 fgets(buff, sizeof(buff), stdin); 13 if (sscanf(buff, "%d", &num[i]) != 1) 14 break; 15 } 16 17 printf("Hello, world\n"); 18 return 0; 19}

かなり手抜きですので、実際にはもう少し工夫した方が良いと思います。
(このままでは、例えばaとか入力しただけでループを抜けます。)

投稿2016/02/26 07:39

Chironian

総合スコア23272

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

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

tada_tadaa

2016/02/26 08:15

ご回答ありがとうございます。 >scanf()で数値を読む時、数値が入力されるまでscanfから返ってこないようです。 >ですので、scanf()ではご希望の仕様はちょっと無理っぽいです。 scanfで数値を読むときは、数値が入力されるまでscanfから返ってこないっぽいんですね。 if(num[i]=='\n') や if(num[i]=='\0')、if(num[i]==' ') 、if(num[i]==EOF) と試しましたが ダメでした。 もしかしたらscanfを複数用いるとか、何かひねった方法であるのかもしれま せんが、頭をやわらかくして、Chironianさんの教えてくれた方法も含め他の方法でやって みようと思います。 ご回答ありがとうございました。
guest

0

何も入力されずにEnterされたらscanfの戻り値がEOFになるのではなかったっけ?
んだから

C

1scanf("%d", &num[i]); 2if(num[i]=='\n') break;

のところを

int ret = scanf("%d", &num[i]); if ( ret == EOF ) break;

とすればよいのでゎ。

投稿2016/02/26 07:30

tkturbo

総合スコア5572

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

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

tada_tadaa

2016/02/26 07:40

回答ありがとうございます。 tkturboさんが教えて下さった方法を試したのですが、何も入力せずただEnterキーを押すので あれば終了しませんでした。何か数値以外の文字を入力すれば終了しました。多分、文字が 入力されたので指定子は%dで数値に対応してますが、文字が入力されたのでEOFを返したの ではないかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問