• ベストアンサー

教えてください!

段数を入力して*を使って直角三角形を表示するプログラミングで 段数が1~9までで、それ以外の場合はエラーメッセージを出力するするにはどうしたらいいですか? 制御分はfor文で。 直角三角形は出力出来るんですが、それ以外のエラーメッセージの出力方法がわかりません。 お願いします。

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

  • ベストアンサー
回答No.4

scanfのあとにlnが正しい範囲にはいっているか判定するコードを入れましょう。 こんな感じ? if (ln<1 || 9<ln) { えらー処理 } else { ただしい処理 }

その他の回答 (4)

  • arain
  • ベストアンサー率27% (292/1049)
回答No.5

No.1です。 すでに、No.4までで回答が出ていますが、言えることは 「条件文(if文)勉強しましょう」 ということです。 ついでに、この際だからswitsh文のことも勉強しておきましょう。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

もうちょっとまともなタイトルを付けましょう。 入力した段数の値をif文で判定して、1~9の範囲にあれば三角形を出力し、 それ以外(つまりelseってこと)の場合はエラーメッセージを出力する。 以上です。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「直角三角形は出力出来るんですが」 ということなので, 「直角三角形」をどのように出力しているのか, そのコードを示すとともに「どのような動作をしているのか」きっちりと説明してもらえませんか?

mjnike
質問者

補足

#include <stdio.h> int main(void) { int i, j, ln; printf("何段ですか? /n"); sanf("%d", &ln); for(i = 1; i <= ln; i++) { for (j = 0; j <= ln-i; j++) { putchar('*'); } putchar('/n') } return(0); } としたところ、 何段ですか? 4 **** *** ** * となります。 これを 何段ですか? 12 表示できません。 というふうにしたいのですが。 よろしくお願いします。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

>段数が1~9までで、それ以外の場合はエラーメッセージを出力 そのままですよ。 入力した数値が1~9までの範囲になければエラーメッセージを表示するだけ。 >直角三角形は出力出来るんですが、それ以外のエラーメッセージの出力方法がわかりません。 「*」が表示できるのに、なぜエラーメッセージが表示できないのか理解に苦しみますが。 ひっょとして、printf()を使用し内で別の表示をしている?

関連するQ&A

  • 数値入力で、同番号と範囲外を両方防ぐ方法

    初歩的な質問で申し訳ないのですが、scanfで10個の数字を入力する際、 範囲外だった場合(0~100以外)と数値が重複していた場合、それぞれエラーメッセージを出力するにはどのような方法をとったらよろしいでしょうか? forやwhileを同時に使ったりしてるのですが、うまくいきません。 それと、別の質問なのですが、for文はbreakで抜けることは可能でしょうか?

  • 整数格子点を列挙するプログラム

    『座標上に(0,0),(x,0),(0,y)を頂点とする直角三角形を考え、 xとy(整数)をキーボード上から任意に入力した場合に、 その境界線上も含む整数の格子点を例のように表示する プログラミングを作成せよ。』という問題です。 入力例:(xに3,yに4をキーボード上から入力) > Input x : 3 > Input y : 4 出力例:(入力した整数に応じて以下のように出力) > (0,4) > (0,3) > (0,2) (1,2) > (0,1) (1,1) (1,2) > (0,0) (1,0) (2,0) (3,0) for文を使うと思うのですが、どのようなプログラムを作ればいいのか分らないので、教えてください。

  • 【C言語初心者です】制御文をループに関して

    C言語習いたての者です。どうぞよろしくお願いします。 1~20の範囲内で数値を5回入力させ、入力順に画面に出力するプログラムを作りたいと思っています。 この中で、範囲外の数値か、入力済みの数値が入力された場合に、 それに応じたエラーメッセージを表示させ、再入力を要求する仕組みを 加えようと思い、 制御文を用いてどういうループにすればいいか考えているのですが、 思うような結果が返ってきません。 今まで私が考えていたループの構造としては、 int count = 0;<<ループ用カウンター宣言・初期化>> if(<<入力された数値が指定範囲内の時>>) { _ for(<<countが範囲内かどうか>>) _ { __ if(<<入力された数値が入力済みではない時>>) __ { ___ break;<<ループ終了。次の数値入力>> __ } __ <<数値重複用エラーメッセージ出力>> _ } _ break;<<ループ終了。次の数値入力>> } <<範囲外数値用エラーメッセージ出力>> 条件としては、 ・配列と制御文を用いる ・標準ヘッダファイルは<stdio.h>のみを用いる 上記のループをどう修正したらいいか、を教えていただけるとうれしいです。

  • C言語でカレンダーを作成しています

    こんばんは。 当方プログラミング初心者なのですが、C言語でカレンダーを作成しています。 具体的には年だけ入力すれば一年分のカレンダーが出力され、 年と月を入力すればその年月のカレンダーが出力されるようなプログラムを作りたいと思っています。 例えば2011年と入力すれば2011年一年分のカレンダーが表示され、 2011年2月と入力すれば2011年2月一月分のカレンダーが表示されるといった感じです。 また、年を入力しなかった場合はエラーメッセージを返すようにしたいと考えています。 プログラムの概要は以下のようなものを考えてます。 scanfで年月を入力 if(年だけ入力すれば) 一年分のカレンダーを表示 if else(年月両方を入力すれば) 一ヶ月分のカレンダーを表示 else(それ以外) エラーメッセージ カレンダーを表示するプログラムは完成したのですが、if文の中身をどのようにすればいいのかわかりません。 良い案がありましたら、ご教示お願い致します!

  • 入力形式を限定する

    VBAを学び始めたばかりなので、詳しく教えていただきたいです。 VBAのプログラミングで、 「12行目と13行目の値に**:**(時刻)の形式以外の値が入った場合、 エラーメッセージを表示する」というプログラミングをしたいと 思っています。 この**:**の形式に限定する、という文がわかりません。 ちなみに時刻なので/=DATEを使ってみましたが、 21:100などの値が入ってもエラーがでませんでした。 なので形式を**:**に限定したいと思っています。 わかる方いらっしゃいましたら、よろしくお願いします。

  • プログラミング for文

    プログラミング for文 プログラミングの問題です。 「自然数nを入力し、以下のようなパターンが出力されるようなプログラムをfor文を使って作成せよ。」 (例:n=3のとき) % ./a.out n: 3 * ** *** *__* **_** ****** *__*__* **_**_** ********* (例:n=4のとき) % ./a.out n: 4 * ** *** **** *___* **__** ***_*** ******** *___*___* **__**__** ***_***_*** ************ *___*___*___* **__**__**__** ***_***_***_*** **************** (_で空白を表しましたが、上手く見られないかもしれません…。小さい直角三角形が下に行くにつれ1個ずつ増え、全体的にみると大きい直角三角形が見えるイメージです。) つまり、n=3なら、 * ** *** を単位として、1~3行目にはこれが1つ、4~6行目にはこれが2つ、7~9行目にはこれが3つあります。 一般に、 * ** *** … ********(←n個) を単位とし、n^2-2~n^2行目にこれがn個あるようなパターンです。 私はまず、単位パターンをプログラムしました。 #include <stdio.h> main() { ___int n, i, j; ___printf("n: "); ___scanf("%d", &n); ___for (i=1; i<=n; i++) { ______for (j=1; j<=i; j++) { _________printf("*"); ______} ______printf("\n"); ___} } (_は空白です) しかし、単位パターンを横に2個、3個と並べるプログラムが分かりません。 さらにfor文を使い、3重、4重にするのですか?どなたか教えてください。

  • C言語プログラミングで「コマンドラインから3つの整数を入力し、大きい順に並べる

    C言語プログラミングで「コマンドラインから3つの整数を入力し、大きい順に並べるプログラムの作成」なのですが,どなたかわかる人はいらっしゃりますか? C言語初心者です. if else文を使って作成するのですが,整数の入力において、同じ数字を認める方法と認めない方法がありますが,両方教えていただけると助かります. 例えば 10、5、21の数字をコマンドラインから入力したときに 出力結果は21、10、5と並ぶ. 同じ数字を認めるとき、例えば 10、10、30と入力したとき出力結果は30、10、10となる 同じ数字を認めないときは、コマンドラインからの入力時に、もし同じ数字が入力されたらエラーメッセージを返して終了 といった具合です.どなたかお願い致します.

  • 数値が登録済みの場合エラーで再入力させる

    はじめまして。どうしても課題のプログラムができません。教えてください。 個人番号、名前で構成される構造体を作成。7人分データを入力し、出力するプログラムです。サブ関数を使って一件分のデータを入力、メイン関数で人数分のカウンタ、データの出力。 個人番号は、1-100までの数値で、同じ番号は登録できません。なので、範囲外の時、登録済みの番号がある時はそれぞれエラーメッセージを表示させます。 範囲外の数値の場合のエラーはできるのですが、同じ番号の場合のエラーメッセージが出せません。 #include<stdio.h> typedef struct person { int no; char name[20]; }Member; void input_data(Member *,int); /*入力用の関数*/ int main(void) { int cnt; Member member[7]; /*構造体の配列*/ for(cnt-0;cnt<7;cnt++)/*件数分カウンタをまわす*/ {input_data(&member[cnt],cnt);} ~データを表示させる~ return 0;} void int_data(Member *imem,i_cnt) { while(1){ printf("学籍番号入力: "); scanf("%d",&imem->no); if(imem->no >=1&&imem->no <=100); {break;} printf("1~100の番号を入れてください"); } while(1) ~名前の入力~ return;} 考え方としては数字が適切な範囲内の時、登録済み番号でないか調べる。imemからforでマイナスしていって、登録済みか調べる。という制御文にしなくてはなりません。教えてください。

  • for文を使ったプログラム

    プログラミング初心者です。 ある数字を入力すると、1からその数字までが表示されるプログラムをfor文を使って作りたいのですが、どうすればいいのでしょうか?

  • バッチでイベントログ出力したい

    バッチでイベントログ出力したい Windows2003でバッチファイルにてコマンドを実行し、エラーの場合は イベントログに出力したいと考えています。 ERRORLEVELを判定してエラーなら eventcreate /ID 100 /L system /SO Cmd /T ERROR /D "エラーメッセージ" のようにeventcreateコマンドを実行するようにしています。 この"エラーメッセージ"の部分を実際のコマンド実行時のエラーメッセージを 入れ込みたいのですが複数行入れる方法がないか教えてください。 コマンド 2> file.log のようにエラーを出力してそれをfor文で読み込んでいこうとしたのですが 変数に複数行入れることができず、上手くいきません。 何か良い方法があれば教えてください。

専門家に質問してみよう