71386


整数配列dataに対し、その要素の数だけ*を表示するプログラムを作成したのですが、うまく行きません。

以前にも、整数配列dataに対して、その数を表示するプログラムは作成したことがあるのですが、その応用だと思って、最初は以下のようにプログラムを作成しました。

[code]

    #include <stdio.h>
    
    void readIntArray(int a[], int size)
    {
     int i;
     for(i=0;i<size;i=i+1) {
          printf("%d番目? ",i+1);
          scanf("%d",&a[i]);
      }
    }
    void printIntArray(int a[], int size)
    {
      int i;
      for(i=0;i<size;i=i+1) {
          printf("%d ",a[i]); 
    }
    printf("\n");
    }
    
    void put_AstArray(int a[],int size)
    {
        int i;
        for(i=0;i<size;i++){
          printf("* ");
          printIntArray(i);
        }printf("\n");
    }
    
    int main(void)
    {
        int data[100], size;
        
        printf("n=? ");
        scanf("%d", &size);
        
        readIntArray(data, size);
        printIntArray(data, size);
        put_AstArray(data,size);
        return 0;
    }
    
[/code]

しかし、作成してみたものの、エラーが出てしまいます。  
どうしたら、以下のような期待している結果が出力されるのでしょうか。  
**＜期待しているコンパイル結果＞**

[code]

    $ ./a.out
    n=? 4
    1番目? 1
    2番目? 3
    3番目? 4
    4番目? 2
    a[1]:*
    a[2]:***
    a[3]:****
    a[4]:**
    
[/code]


CC BY-SA 4.0
2020-10-21T07:46:21.243
71383
2020-10-21T14:33:18.237
2020-10-21T14:33:18.237
32986
41837
question
c
*（アスタリスク）を出力するC言語プログラムを作成したい


gccが以下のエラーを出力しました：

> main.c:25: error: too few arguments to function 'printIntArray'

25行目を見ると、`printIntArray(i);`の入力引数が一つで、関数定義`void printIntArray(int a[], int
size)`と不一致です。

【変更を始めます】

`main`に関数の呼び出しが期待している出力と違いです。  
「`X番目?
X`」の行は`readIntArray`関数で、「`a[X]:X`」の行は`put_AstArray`関数で出力したんです。`printIntArray`関数は`data`アレイに保存する各入力数字しかを出力しないです。ここに必要ない。

[code]

        readIntArray(data, size);
    //    printIntArray(data, size);  // <--- 必要ない
        put_AstArray(data,size);
    
[/code]

`put_AstArray`関数に`for`ループをまた一つ追加します。  
`i`変数のループ範囲は`main`関数の最初に入力した`n`の値です。  
`j`変数のループ範囲は`X番目`に入力した`*`の数です。期待している数の`*`を出力ためです。

[code]

    void put_AstArray(int a[],int size)
    {
    /////////////////////////
    //    int i;
    //    for(i=0;i<size;i++){
    //      printf("* ");
    //      printIntArray(i);
    //    }printf("\n");
    /////////////////////////   ↓へ変更
        int i,j;
        for(i=0;i<size;i++){
          printf("a[%d]:",i+1);
          for(j=0;j<a[i];j++){
            printf("*");
          }
          printf("\n");
        }
    }
    
[/code]


CC BY-SA 4.0
2020-10-21T08:52:09.680
71386
2020-10-21T08:52:09.680
41425
71383
answer