• ベストアンサー

C言語

距離と平均速度を入力させ、所要時間を計算して表示せよ。なお次のような表示を出力して、yかnを入力させ、yの時にはうえの処理を繰り返すようにせよ。という問題を考えてもyを入力したあと繰り返すようにすることができません。 できれば、プログラムを書いて教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.2

>最後のscanfのところの"%1s"とはどういう意味ですか。%cとはどう違うのですか? %cにするとうまく動作しない事を経験で知っているからです。 恐らく、その前のscanfのデータを確定する際の<Enter>が、標準入力バッファに残っていて、次の%cを確定されてしまうんでしょうね。 >scanf("%1s",&key);の部分をgetchar()を使うと無視されて、終了してしまうのはなぜですか。 これも前の質問の回答と同じ事ですね。 key = getchar(); にすると、keyには'Y'や'y'以外の値、恐らく0x0aか0x0dが入っているので、whileループから抜けてしまうんです。

その他の回答 (1)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

#include <stdio.h> int main() { int m,s ; char key ; do { printf("距離 (km)\t: "); scanf("%d",&m); printf("速度 (km/h)\t: "); scanf("%d",&s); printf("時間 (h:mm:ss)\t: %d:%02d:%02d\n",m/s,(60*m/s)%60,(3600*m/s)%60); printf("続行 (Y/N)\t: "); scanf("%1s",&key); } while ( key == 'Y' || key == 'y' ); return 0 ; }

rankle
質問者

補足

最後のscanfのところの"%1s"とはどういう意味ですか。%cとはどう違うのですか? scanf("%1s",&key);の部分をgetchar()を使うと無視されて、終了してしまうのはなぜですか。

関連するQ&A

  • C言語の数学関数の質問

    y=√xを計算する。任意のxを入力し、yを出力するプログラムを作成しなさい。ただし、x<0のとき、Yは虚数になるので次のように虚数らしく表示させること。 例) xを入力 :4 y=2.000000 yを入力 :-2 y=1.414214i この問題がわかりません。どのようなプログラムを作成すればよいですか?

  • C言語(プログラミング)

    次の働きをするプログラムを作ろうと考えてますが、出来ない状態です。 入力:1から4999の間のアラビア数字を受け取る。入力の終わりは改行。 出力:入力されたアラビア数字に対応するローマ数字を出力する。 変換したい次のアラビア数字があるかどうかを(y又はnで)尋ねてyならば上の入力からを繰り返す,nならば終了。 自分が考えたのは、4999以下のアラビア数字がきた場合と5000以上のアラビア数字がきた場合を考え、 int c;while((c=getchar()) != '\n')、Switch(c)文を使い、CASEでCase C<=4999:Case C>=5000としたのですがコンパイルできませんでした。ご指摘やアドバイス、このプログラム自体教えていただければありがたいです。お願いします

  • C言語

    文を繰り返すときに、『続けますか(Y=続行。N=終了)』と表示して、Yが入力されたら文を繰り返すようにしたいのですが、わからないので教えてください。 #include<stdio.h> int main(void) { int m,s,r,num; char moji; num=1; do{ printf("距離を入力してください。\n"); scanf("%d",&m); printf("平均速度を入力してください。\n"); scanf("%d",&s); r=m/s; printf("所要時間は%dです。\n",r); printf("続けますか?(Y=続行。N=終了)\n");/*このあたりがどうすればいいのかわかりません*/ moji=getchar(); }while(num) printf("終了します。\n"); return 0; }

  • C言語について  

    次のような問題が解けません。あと少しなのでよろしくお願いします。 4回目と5回目がうまく表示されません。 キーボードから値を入力し、1から入力された値までの奇数の和を求めて出力するプログラムを作成しなさい。ただし、for文を使うこと。 また、0 や負数が入力された場合は合計値を0と表示すること。 実行例 入力値:9 合計値:25 #include<stdio.h> int main(void) { int n,ne,kisuu; printf("\n入力値:"); scanf ("%d",&ne); n=1; kisuu=0; for(n=1;n<=ne;n=n+2){ kisuu=kisuu+n; printf("\n1から %dまでの奇数の和:%d\n",ne,kisuu); } }

  • C言語でのプログラミングの問題が分かりません。

    C言語でのプログラミングの問題が分かりません。 課題で出た問題なのですがわからないのでおしえてください。 問題は 値を入力します(nとします) nが1でない間、以下の処理を繰り返します。  (1)nが偶数のとき、nを2で割り、その答えを新しいnとします。  (2)nが奇数のとき、nを3倍してから1を加え、その答えを新しいnとします。 というものです。 if文を使い計算はできたのですが、「繰り返し」と「新しいnとする」部分が分かりませんでした。作成したプログラムを載せるので手直しお願いいたします。 int n,x,y; printf("整数を入力"); scanf("%d",&n); while (n>1) if (n%2) printf("%d",x=n*3+1); else printf("%d",y=n/2); putchar('\n'); return(0); です。このままだと無限ループしてしまうので繰り返しの条件が悪いみたいです。 それと、答えをnに入れたいのにx、yを使ってしまっています。 回答お願いします。

  • C言語について

    初項a,公比r,項数nの等比数列で、第n項までの和SnがSmaxを超えない範囲での最大の項数nを求める。 キーボードからa,r,Smaxを入力し等比数列の和SnがSn≦Smaxを満たす最大の項数nとその時のSnを表示するプログラムを作成せよ。 という問題でプログラムを作っているんですが、Snはなんとか求められるのですが項数nが思ったように出力されません。 どのようにすれば求められるのでしょうか? どうかよろしくお願いします。

  • C言語の課題で

    C言語の課題で 「成績集計プログラム 入力件数nをキーボードより入力し、n人分のテストデータを入力する。その際、合計点、最高点、最低点を求め、最後に平均点を計算しそれぞれを出力するプログラムを作成せよ。ただし、平均点は実数型とし小数点第2位まで出力する。平均点以外の変数は整数型とする。」というのが出ました。 #include <stdio.h> int main(void) { int n,a,b,c; int res,i; printf("入力件数を入力して下さい。\n"); scanf("%d",&n); for(i = 1; i <= n; i++) { printf("点数を入力して下さい。\n"); scanf("%d",&a); printf("%d人目=>%d\n",i,a); if(i == res) break; } return 0; } ここまでは、出来たのですが、後が分かりません。どなたか教えていただけませんか?お願いします。

  • c言語の配列のプログラム

    実数yの値をキーボードから入力し、数列an=1/n!(n=0.1.2.・・・.8.9)を係数にもつ多項式f(y)=a0 + a1y + a2yの2乗 +・・・+ a9yの9乗 の値を計算して画面に表示するプログラムをforのループを使って教えてください。

  • C言語の四則演算

    C言語で次のようなプログラムを作りたいのですが ソースを教えていただけないでしょうか? 四則演算のみの計算式を標準入力から受け取り計算式の通りに計算を行い計算式と答えを標準出力に出力する どなたか教えてください

  • 至急で、C言語の問題で解答解説お願いします。

    1実数を3つ(a,b,c)を読み込み3辺とする三角形ができるか判定(d(d-a)(d-b)(d-c)>0のとき三角形となる)しできなければ、三角形ではありません!というメッセージを表示し、できる場合は以下のヘロンの公式を用いて三角形の面積を求めるプログラムをC言語で答えてください。d=(a+b+c)/2 s=√{d(d-a)(d-b)(d-c) 2maxの整数値(≧1)をキーボードから入力し、その値に対応した図形を出力するプログラムをC言語で答えてください。 例 max1 max2 max3 * ** *** * ** *** * ** *** ** *** *** 3整数nをキーボード入力しnの値に応じて以下の図形を表示するプログラムをc言語で答えてください。 n=3 n=4 n=5 3 4 5 45 56 67 678 789 890 0123 1234 56789 4整数n(≧0)を入力し歯科の計算を実行するC言語プログラムを答えてください。2つの自然数nとmを読み込みn個の中からm個を取り出すときの組み合わせの数を計算せよ。ただし、n!を計算する関数long fact (int n)を定義し必ずそれを用いること。 5 1つのscanfで2つの10進数を入力し8進数と16進数で表示するプログラムをC言語で答えてください。 6 実数aを入力し少数第1位で四捨五入する関数g(a)をマクロ定義で入力した値の少数第1位を四捨五入して出力するプログラムをC言語で答えてください。 7 4つの実数w,x,y,zを読み込みその最大値を出力するプログラムをC言語で答えてください。ただし、2つの実数の大きいほうを求める関数 double my may (double x,double y)を定義し、その関数を用い、if文を用いないでc言語で答えてください。

専門家に質問してみよう