2016-11-01 8 views
0

私のプログラムは、ユーザー入力のサイズに合わせて動的に配列を割り当てます。 (ユーザー入力が「5」の場合、私のprog配列のサイズは5です)。この配列の各要素には構造体が含まれている必要があります(構造体には名前と10種類のテストのポイントが含まれています)。最後に、私はこのように、これらの構造体を出力したいと思います:ダイナミック配列の要素をユーザー入力から構造体で埋める方法は?

a 
1 2 3 4 5 6 7 8 9 10 
b 
4 5 3 2 3 7 8 9 11 12 

私の問題は、私はこれを達成する方法がわからないということです。

a 
1 2 3 4 5 .... 10 
b 
1 2 3 4 5 .....10 

が、私はこれで時間を過ごし、私は完全に失われていますように感じる:私は達成することができた唯一のものは、下記のプログラム(私は最後に入力したデータがすべてを変える)と、これです。

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

struct programming{ 

    char name[30]; 
    int partpoints[10]; 
}; 

int main(){ 

    struct programming *prog; 
    int j,i,N; 

    printf("Please enter the total number of students: \n"); 
    scanf("%d", &N); 

    prog=(struct programming*) malloc (N * sizeof(struct programming)); 

    for(i=0;i<N;i++){ 
     printf("Please enter the name of the student: \n"); 
     scanf("%s",(prog+i)->name); 
        for(j=0;j<10;j++){ 
         scanf("%d", (prog+j)->partpoints+j); //PROBLEM!!!!  
        } 
    } 

    printf("Name of students and their points: \n"); 
    for(i=0;i<N;i++){ 
     printf("%s\n", (prog+i)->name); 
     for(j=0;j<10;j++){ 
      printf("%d\t",(prog+j)->partpoints[j]); //PROBLEM!!!! 
     } 

    putchar('\n'); 
    } 

    return 0; 
} 
+0

構造番号を注文したいのですか? –

+0

あなたは「N」へのユーザー入力を要求しません –

+0

あなたは学生番号をスキャンしませんでしたN !!!!!! –

答えて

1

問題は、あなたのネストされたforループでは、あなたがiの代わりにインデックスprogjを使用することで、あなたはscanfにint型へのポインタを渡す必要があります。

for(i=0;i<N;i++){ 
    printf("Please enter the name of the student: \n"); 
    scanf("%s",(prog+i)->name); 
    for(j=0,j<10,j++){ 
     printf("Please enter point %d: \n", j+1); 
     scanf("%d", &((prog+i)->partpoints+j)); // no more PROBLEM now 
} 

注意:もしscanfフォーマット文字列に空白を追加する必要があります。空白文字をスキップし、cr/lf:" %d"(私はscanf guruではありません)。

+0

ありがとうございました!ほんとうにありがとう!!! – Terminatorka

関連する問題