dポイントプレゼントキャンペーン実施中!

アスタリスク(*)で正方形を作るプログラムをC言語で書いているのですが関数で描画部分を作ることが出来ません。動かす方法を教えて頂けないでしょうか

#include <stdio.h>

void seihoukei(void);
int no,i,j,cnt;
int main(void)
{
int cnt,i,j;

do{
printf("数字(2-9)を入力して下さい:");
scanf("%d",&cnt);

if(cnt<2||cnt>9){
printf("入力エラーです。もう一度入力して下さい");
}
}while(cnt<2||cnt>9);

for(i=1;i<cnt;i++){
for(j=1;j<=cnt;j++){
seihoukei();
}
}
return 0;
}
void seihoukei(void)
{
j = 1;
while(j <= j){
putchar('*');
j=j+1;
}
putchar('\n');
}

A 回答 (3件)

とりあえずwhile(j <= j)は無限ループになります。



for(i=1;i<cnt;i++){
for(j=1;j<=cnt;j++){

でcnt*cntの'*'を書けばいいという意図は見えるのですが
void seihoukei(void)でまたループしてるので何がしたいのかよく分かりません。
またここがなぜwhileなのかも不明
ついでにforの条件式がおかしいです。

とりあえず正方形を書きたいだけであれば。

for(i=1;i<cnt;i++){
for(j=1;j<=cnt;j++){
putchar('*');
}
putchar('\n');
}

でいけると思います。
もし関数にしたいなら

for(i=1;i<cnt;i++){
for(j=1;j<=cnt;j++){
seihoukei();
}
}

をseihoukei(cnt);にして

void seihoukei(int size)
{
int i,j;
for(i=0;i<size;i++){
for(j=0;j<size;j++){
putchar('*');
}
putchar('\n');
}
}

を呼び出す形にすればいいと思いますがとりあえず文法が怪しいのでその辺を注意しながらやるといいです。
    • good
    • 0

変数の有効範囲(スコープ)、グローバル変数、ローカル変数、といったものを勉強しましょう。


また、関数への値の渡し方(引数の使い方)も勉強しましょう。

main関数中の
> for(i=1;i<cnt;i++){
> for(j=1;j<=cnt;j++)
にある i, j と seihoukei関数中の
> j = 1;
> while(j <= j){
のi,j とは名前は同じですが、まったく関係のない別の変数です。
    • good
    • 0

変更箇所ができるだけ少なくなるようにコーディングしてみました。



//--------------------------------------------------------------------
#include <stdio.h>

void seihoukei(int cnt);

int main(void)
{
int cnt, i, j;

do{
printf("数字(2-9)を入力して下さい:");
scanf("%d", &cnt);

if(cnt < 2 || cnt > 9){
printf("入力エラーです。もう一度入力して下さい");
}
} while(cnt<2 || cnt>9);

seihoukei(cnt);

return 0;
}


void seihoukei(int cnt)
{
int i, j;

for(i=0; i<cnt; i++){
for(j=0; j<cnt; j++){
putchar('*');
}
putchar('\n');
}
putchar('\n');
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!