無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
a

無題

#1

投稿記事 by a » 15年前

基本課題 10..3
基本問題8.2で作成したアスタリスクで作成した直角三角形 を印字するプログラムを関数を使って作り直してみよう。指定された文字を指定 された回数だけ連続して印字する処理を関数化する。この関数の宣言を

int run(char c, int length);
とする。すなわち、関数runは文字cを長さlengthだけ印字する。 戻り値は印字した文字の個数(すなわち、length)とする。
この関数runを作成し、キーボードより入力された任意の正の整数を高さと する直角三角形を印字するプログラムを作成せよ。

% decWithFunc
正の整数: 15
1: ***************
2: **************
3: *************
4: ************
5: ***********
6: **********
7: *********
8: ********
9: *******
10: ******
11: *****
12: ****
13: ***
14: **
15: *
%

という課題で、わからないことがあります。

/* ここからコピー */
#include <stdio.h>

# define BUFFER_SIZE (256)

int get_int(void)
{
char buf[BUFFER_SIZE];

fgets(buf, BUFFER_SIZE, stdin);

return atoi(buf);
}
/* ここまでコピー */

int run(char c,int length)
{
int j;
for(j=1;j<=length;j++)
{
printf("%c",c);
}
printf("\n");   ←ーーー①
return length;

}
int main(void)
{
int a,i,kat;
printf("正の整数:");
a = get_int();
//正の整数でないといけないから
if(a>0)
{
int b,c,d;
for(b=0;b<a;b++)
{
printf("%d",b+1);
for(d=0;d<b;d++)
{
printf(" ");
}

kat =run('*',a-b);
//printf("\n"); ←ーーーー②
}
}

return 0;
}

①の場所で改行すればうまくいくのに②の場所で改行してもうまくいかないのはなぜ?

fatens

Re:無題

#2

投稿記事 by fatens » 15年前

>①の場所で改行すればうまくいくのに②の場所で改行してもうまくいかないのはなぜ?

試してみたところ同じように表示されましたが?


あと、せっかく関数にしたので空白の出力もrun関数で。
#include <stdio.h>

#define BUFFER_SIZE (256)

int get_int(void);
int run(char, int);

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

printf("正の整数: ");
n = get_int();

if (n <= 0)
return 1;

for (i = 1; i <= n; i++) {
printf("%2d:", i);
run(' ', i);
run('*', n - i + 1);
putchar('\n');
}

return 0;
}


int get_int(void)
{
char buf[BUFFER_SIZE];

fgets(buf, BUFFER_SIZE, stdin);

return atoi(buf);
}

int run(char c, int length)
{
int i;

for (i = 0; i < length; i++)
putchar(c);

return length;
}

a

Re:無題

#3

投稿記事 by a » 15年前

run関数で空白もできるんですね。わかりました。ありがとうございます。


閉鎖

“C言語何でも質問掲示板” へ戻る