ページ 11

C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 10:36
by まるくま
直角三角形(左上が直角)をつくりたいのですが、

コード:

#include <stdio.h>

int main(void)
{
	int i=0;
	int j=0;
    int In;

	printf("何段ですか:");
	scanf("%d", &In);

	for(i=In; i<=In; i--){  // i行(In個, In-1個・・・・)
		for(j=In; j<=In; j--) // In,In-1個の*を表示
			putchar('*');
	}

	return(0);
}
と書いたのですが,
無限ループしてしまいます。
ヒントお願いします(`・ω・´)

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 10:48
by softya(ソフト屋)
今回のバグと関係ないですが、とりあえずifなどで{}は省略するのは止めましょう。必ずバグの原因となります。
それとデバッガの使い方は理解されていますか? デバッガを使えばすぐ原因は分かると思います。

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 10:52
by asd
まるくま さんが書きました: 無限ループしてしまいます。
ヒントお願いします(`・ω・´)
ご自分でヒントを書いていることに気がついていますか?
無限ループしていることが分かっているなら、ループの部分を追っていけば
原因はおのずとわかると思います。

softyaさんも指摘している通り、デバッガを使うとより詳しく動作を調べられますよ(*´ヮ`)

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 11:40
by 96neko
条件がおかしくないですか?
for(i=In; i<=In; i--)
iがInと同じかiがInより小さい場合ループを繰り返すのに
-1ずつしていっても永遠にInよりもiの数値は小さいままですよ
あと{}はつけたほうがいいと思います

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 15:58
by まるくま
96nekoさん、asdさん、softyaさん、ありがとうございます(`・ω・´)

デバッガとはエラーとかが見れるやつのことでしょうか?

修正してみました。無限ループからは抜けられましたが、
長方形になってしまします。
for文の部分がごっちゃになってよくわかりません(´・ω・`)

コード:

#include <stdio.h>

int main(void)
{
	int i=0;
	int j=0;
    int In;

	printf("何段ですか:");
	scanf("%d", &In);

	for(i=In; i>=1; i--){  // i行(In個, In-1個・・・・)
		for(j=In; j>=1; j--){ // In,In-1個の*を表示
			putchar('*');
		}
		putchar('\n');
	}

	return(0);
}

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 16:03
by softya(ソフト屋)
デバッガを使うとは、こういう事です。
「太田研究室 > Visual C++ 2008 Express Edition プログラミング入門」
http://cvwww.ee.ous.ac.jp/vc08prog.html#6

長方形になる理由は、そうプログラムしているからですが、どうやったら三角形になると思ってプログラミングしましたか?
ソースコードではなく日本語で説明してみてください。
※ 頭のなかで日本語でイメージできていないものは、プログラミング言語で作れるはずがないからです。

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 16:07
by ホヅミ
二つ目のループのコメント分に注目です
In-1の処理はどこへ行ったのでしょうか?

追伸
C言語初心者のくだらない質問というタイトルよりもわからないことを直接タイトルにした方がいいですよ。
誰だってみんな初心者ですし、くだらない質問なんてこの世には存在しないのですよ。
がんばって!

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 16:19
by まるくま
やっとできました(`・ω・´)

softyaさん、ホズミさんありがとうございます。

デバッガは今度使ってみたいと思います。

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 16:21
by softya(ソフト屋)
フォーラムルールですので、完成版を投稿してくださいね。
http://dixq.net/board/board.html

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 16:23
by まるくま
あ、はい(汗

コード:

#include <stdio.h>

int main(void)
{
	int i=0;
	int j=0;
    int In;

	printf("何段ですか:");
	scanf("%d", &In);

	for(i=In; i>=1; i--){ // i行(In個, In-1個・・・・)
		for(j=In; j>=1; j--){ // In,In-1個の*を表示
			putchar('*');
			
		}
		putchar('\n');
		In--;
	}

	return(0);
}

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 16:24
by ホヅミ
そして、ボクの名前はホズミではなくホヅミですぜ☆

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 19:18
by まるくま
失礼しました☆

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 19:22
by softya(ソフト屋)
よく見たら危険な書き方が有ることに気づきました。長いプログラムなら簡単にバグりそうです。

せっかく-1しているのがあるので、それを使いましょう。
入力使った数値を変更するのは止む負えない場合だけが望ましいです。

コード:

#include <stdio.h>
 
int main(void)
{
    int i=0;
    int j=0;
    int In;
 
    printf("何段ですか:");
    scanf("%d", &In);
 
    for(i=In; i>=1; i--){ // i行(In個, In-1個・・・・)
        for(j=i; j>=1; j--){ // In,In-1個の*を表示
            putchar('*');
            
        }
        putchar('\n');
    }
 
    return(0);
}

Re: C言語初心者のくだらない質問5

Posted: 2013年3月22日(金) 19:53
by まるくま
はぁ・・・難しいですね(汗

意識するようにしてみます。