#include<stdio.h>
int main(void){
int n,i,j,k;
char c='*';
printf("正の整数:");
scanf("%d",&n);
if(n>0){
for(i=1;i<=n;i++){
printf("%d",i);
for(j=1;j<=n+1-i;j++){
if(j==1){
if(i-1>0){
for(k=i-1;k>0;k--){
printf(" ");
}
}
}
printf("%c",c);
}
printf("\n");
}
}
break;
return 0;
}
これをコンパイルすると「break の位置が誤っている(関数 main )」と表示されるのですが何でですか?
困ってます↓
No.7
- 回答日時:
>fprintf(,"");
>と
>stderr
>の意味を教えていただけませんか??
fprintfはファイルへ出力する関数です。
stderr はエラー表示のための出力と思ってかまいませんので、エラー表示のための出力になります。printfだと標準出力(stdout)への出力となります。
stdoutとstderrはコマンドプロンプト上では同じコンソールへの出力となりますから、printfでやっても基本的にはかまわないのです。が、このプログラムの出力を別のプログラムの入力にしたい、などという場合(バッチファイルではパイプを使う場合など)を考えると、エラーメッセージと標準的な出力は分けた方が良い、とされています。
取り合えず、多分、質問者様のソースから「break;」を消せば、良し悪しは別としてコンパイルと実行は可能かと思います。
No.6ベストアンサー
- 回答日時:
・「プログラムの流れ・終了が、判らない」ですかね。
if, for 文など、基本的な部分を勉強してみては如何でしょう。
なお、末尾の return 0; は、「プログラム終了」の命令です。
質問者様が break; を入れた場所は、ここを「nが0以下のとき『は』通過する」と
理解できていたから、ですよね。
☆となると、「プログラム終了直前に、なにを(どこへ)ブレイクさせればいいんだ」となりませんか。
http://www.kumei.ne.jp/c_lang/
>これをコンパイルすると「break の位置が誤っている(関数 main )」と表示されるのですが何でですか?
No.2 さんのとおり、
質問者様の break; が、エラー(誤った使い方)だからです。
>でもnが0以下のとき、プログラムを終了させたいんですよ
if 文を勉強すると、「nが0以下のとき」を簡単に記述できるようになります。
今回のように「nが0を超えるとき」の if 文があるなら、
ちょうど反対の条件なので、else 文で簡略化できます。
今回の break; は、少なくとも else break; とすれば、それでも誤った使い方ですが、
少しは救い?があったかと・・。
というか、
「なにもしないで」終了ですよね。でしたら、なんの「命令」も不要です。
冒頭で述べた、末尾の return 0; は、「プログラム終了」の命令です。
ここへ、「nが0以下のとき」は、直行します(◆)。
+++++++++++++++++++++++++++++++++++++++++++++++++++
蛇足
質問者様のソースで、
>if(n>0){
>for(i=1;i<=n;i++){
と
>if(i-1>0){
>for(k=i-1;k>0;k--){
について、if 文と for 文の条件式とが、機能的に重複( if 文不要)しています。
以下に、その部分を整理してみました( n → iVal )。
0 や負の数で試してください。
#include <stdio.h>
int main( void )
{
int iVal, i, j, k;
printf( "正の整数:" );
scanf( "%d", &iVal );
for( i = 1; i <= iVal; i++ ){ // ◆ iVal が 0 以下のとき、当 for 構文スルー
printf( "%2d", i );
for( j = 1; j <= ( iVal + 1 - i ); j++ ){
if( 1 == j ){
for( k = ( i - 1 ); k > 0; k-- ) printf( " " );
}
printf( "*" );
}
printf( "\n" );
}
return( 0 ); // プログラム終了
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
この回答への補足
そうなんですよ
breakの位置は間違えたんじゃないんです;
あれで正しいと思ってたんです。。
ただきちんとbreakを理解してなかったんですよね。。
しかも自分のプログラムに条件の重複があったのも気づきませんでしたしほんと関心しました。
さらにC言語のサイトまでありがとうございます!
いろいろ助かりましたぁ^^
何かあったときはまたよろしくお願いします!
No.5
- 回答日時:
#2です。
>ありがとうございます!
>でも下でも書いたんですが、nが0以下のときプログラムを終了させたいんですよ;
>どうしたらいいでしょうか??
printf("正の整数:");
scanf("%d",&n);
の次の行へ
if (n<=0) return 0;
を入れて下さい。
これで、nが0以下の時は、そこで終了します。
ですから、 if (n<=0) return 0; の次の行は、
nが1以上であることを前提にしたコーディングをすれば良いです。
つまり if(n>0)の文は、不要です。(あってもエラーにはなりません。必ずif(n>0)が成立するだけです)
No.4
- 回答日時:
fprintf とか stderr くらい調べればいくらでも出てきそうな気がするんだけど....
どのくらい調べました?
No.3
- 回答日時:
break;はいらないかと思います。
ifでn>0のみの場合にfor文などを実行してますから、nが0以下の場合は貴方の希望通りに何も実行されずに終了すると思います(確かめてませんが)。
n<=0の場合にメッセージなどを出したい場合は、elseでやるとか。
むしろ、
if( n <= 0 ){
fprintf(stderr,"n <= 0\n");
exit(1);
}
などとやった方が読みやすいかもしれないですけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列を使って魔方陣
-
#if 1 #elseの意味について
-
getcの改行判定
-
構文エラー";"が型の前にあり...
-
プログラミングで二番目に大き...
-
n^kのwhile文のプログラムについて
-
for文の中にswitch文はいれられ...
-
File Edit Options Buffers Too...
-
C言語のプログラミング (基礎...
-
代入を含む条件式
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
C言語での引数の省略方法
-
ある商品のロス率を5%見込み、...
-
「Aに対するBの割合」と「Aに対...
-
マイナスからプラスへ転じた時...
-
【gcc・cygwin】multiple defin...
-
「指定されたキャストは有効で...
-
正負を反転させて出力するプロ...
-
#define _CRT_SECURE_NO_WARNIN...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
10進数からN進数に変換するプロ...
-
getcの改行判定
-
C言語で電卓を作成する。
-
プログラミングで二番目に大き...
-
配列を使って魔方陣
-
C言語プログラムが理解できなくて…
-
計算結果がlong型以上になる場...
-
scanfが実行されません
-
素因数分解のプログラムを作成...
-
プログラム
-
while文を使った問題なのですが...
-
C言語階乗の総和を求める
-
C言語 エラー表示 break の位...
-
C言語の二分法のプログラムにつ...
-
階乗のプログラム!!
-
初心者です。for文、if文を使っ...
おすすめ情報