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

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

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

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

2回答

1361閲覧

while文がうまくいきません。

L4zy

総合スコア18

C

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2020/04/22 07:34

入力が正しくない場合に、続けるを選んだ後に、再度入力をうながしているのですが、なぜか入力の処理をさせてもらえずに、”入力値が正しくありません”と表示されてしまい、入力ができなくなってしまいました。
結構な時間悩んでもわからなかったので質問させていただいています。
分かる方助けてください。

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <ctype.h> 5 6int inputCheck(char myHand); 7int main() 8{ 9 int flg = 0, keep; 10 char myHand, youHand; 11 puts("じゃんけんゲーム!"); 12 13 while(flg == 0) 14 { 15 printf("手を入力してください【グー:1 チョキ:2 パー:3】:"); 16 scanf("%c", &myHand); 17 if(inputCheck(myHand) == 1) flg = 1; 18 else 19 { 20 flg = 0; 21 puts("入力値が正しくありません。\n"); 22 printf("終了しますか?【終了:0 続ける:1】:"); 23 scanf("%d", &keep); 24 if(keep == 0) exit(0); 25 } 26 } 27 28 return 0; 29} 30 31// 入力をチェックする関数 引数:入力値 戻り値:数値1 数値ではない0 32int inputCheck(char myHand) 33{ 34 if(myHand <= '3' && myHand >= '1') 35 { 36 return 1; 37 } 38 39 return 0; 40}

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

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

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

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

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

jimbe

2020/04/22 07:42

> 入力ができなくなってしまいました 具体的に, 実行から終了(?)までの画面の状態を画像なりコピペなりでご質問に追加してくださいますか.
L4zy

2020/04/22 07:59

scanf("%c", &myHand);の部分を%sにするのでも大丈夫ですか?
jimbe

2020/04/22 08:25

大丈夫かと言われれば大丈夫ではありません. scanf は比較的入門時に扱う関数ですが, 実は使い方は結構難しく, それを説明するのも(入門時ということもあって)難しいです. どのような入力がされた時にどのような動作をするのか/させたいのかを調べながら試してみるのが良いかと思います.
guest

回答2

0

分かる方助けてください。

おそらく、「続ける」を入力するときに「1(エンター)」のように入力したかと思いますが、この改行が入力として残って、次の「手の入力」として解釈されてしまいます。

簡易的には1文字読み捨てるような方法もありますが、ある程度安定して入力したい場合は、「fgetsで1行取ってくる→sscanfで行ないから必要な値をピックアップ」のような方法が取られることもあります。

投稿2020/04/22 07:44

maisumakun

総合スコア146018

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

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

maisumakun

2020/04/22 08:02

それだけでは正常に動きません(char1文字の領域を超えて書き込む危険があります)。
L4zy

2020/04/22 08:07

ということは、もし3文字入力したら、2文字捨てなければならないということですか?
guest

0

scanfの"%c"指定は結構厄介な動きをします。
"%s"で文字列として受け取って一部を読み取るか、
" %c"とすると、回避できるかも。

投稿2020/05/03 01:10

amiya

総合スコア1218

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問