2016-04-08 32 views
0

私は実装したいと思っていますが、何とか私のロジックはコードがうまく動作していないので、これが最良のものではありません。forループ内のテキスト書式設定

数字をスクリーン/テキストファイルに書いて、20回の繰り返しの後にそれらを区切る新しい行があるようにしたい。

ご覧ください。

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE * File = fopen("NUMBERS.txt", "w"); 
    int *a; 

    int n; 
    int i; 
    int j; 
    int r; 

    printf("How many numbers do you wish to enter?\n"); 
    scanf("%d", &n); 

    a = malloc(n*sizeof(int*)); 

    time_t t; 

    srand((unsigned)time(&t)); 

    fprintf(File, "%d\n", n); 

    for(i = 0 ; i < n; i++) 
    { 
     r = rand() % 100; 
     a[i]= r; 
     printf("%d ", r); 

     fprintf(File, "%d ", r); 

     if(a[i] % 20 == 0) 
     { 
      printf("\n"); 
      fprintf(File, "\n"); 
     } 
    } 

    system("pause"); 
    return 0; 
} 

出力があるべき(21または任意の高い数)ユーザーが入力したとしましょう:

21 67 24 8 10 27 83 7 89 99 40 69 5 69 12 66 92 99 16 37 22 42

+0

注: 'a = malloc(n * sizeof(int));またはそれ以上:' a = malloc(n * sizeof * a); ' – wildplasser

+0

@wildplasser - あなたは正しいですが、私はbrajevicmの通知この問題は 'int'が' int * '(または最大でも同じバイト数)以下のバイトを使用する可能性が高いためです:-p ...しかしbrajevicm、これを読んでいるなら' malloc'を修正してください見ることは痛いです。 – Myst

+0

私はそれを見てすぐに変更しました。それはおそらく単にタイプミスでした。 – brajevicm

答えて

2

あなたは20回の反復の後に改行を追加したい場合は、チェックする必要がありますi代わりに、アレイ内のi番目の項目の値の反復で使用される変数ので、交換

if(a[i] % 20 == 0)if(i % 20 == 0)

また、別の回答(およびコメント)で指摘されているように、メモリ割り当てが正しくありません。