ページ 11

無題

Posted: 2010年9月11日(土) 17:01
by zman
たアスタリスクで作成した直角三角形 を印字するプログラムを関数を使って作り直してみよう。指定された文字を指定 された回数だけ連続して印字する処理を関数化する。この関数の宣言を

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: *
%


というもんだいで、自分が書いたソースをコンパイルすると
『引数1個の'run'を渡しますにより、キャストなしで整数からポインタを作りました』
とエラーが出ます。これはどういう意味で、どう直せばよいでしょうか?下が私が書いたソースです。

#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 mark,int length){
int j;
for(j=0 ;j < length ;j++){
printf("%c",mark);
}
printf("\n");
return length;
}

int main(void){
int number,i;
printf("数字を入力せよ: ");
number = get_int();

if(number > 0){
for(i=0 ; i < number ; i++){
printf("%d:",i+1);

//空らん
run(" ",i+1 );
//*
run("*",number-i);
}
}
return 0;
}

Re:無題

Posted: 2010年9月11日(土) 17:19
by へろりくしょん
というより、

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

というのは正解例でしょうか。


□□
□□□

で直角ですから、直角であるなら、

**
*

ではなく、

***
*
とならなければならない気がするのですが。


件の出力が仕様と考えてよろしいのでしょうか?

Re:無題

Posted: 2010年9月11日(土) 18:44
by fatens
>printf("\n");

run関数内で改行してしまうと思ったような出力結果にならないので削除。


>printf("%d:",i+1);

ずれないようにするため%2dに。


>run(" ",i+1 );
>run("*",number-i);

run関数に渡すのは文字列ではなく文字なので' 'で囲みます。
また、上で消したprintf("\n");をこのループの最後にもってきます。

Re:無題

Posted: 2010年9月12日(日) 13:36
by zman
printf("\n");の場所を変えて" "を' 'で囲むとうまくいきました。ありがとうございます。

Re:無題

Posted: 2010年9月12日(日) 13:36
by zman