2016-10-24 9 views
-1

私は構造を使って宿題をしています。私はその概念を理解していると思います。 しかし、コードを実行すると、出力が自分の入力と異なっていました。構造の出力が異なります

名前やテストのスコアなど3つの学生情報を入力したかったのです。ここで

私の構造プロトタイプおよび配列コードです:

struct StudentInfos{ 
    unsigned int Student_Number; 
    char Student_Name[20]; 
    char PE; 
    char Social; 
    char Math; 
    char Science; 
    char English; 
}; 

struct StudentInfos Student[3]; 

ここでI入力DATASコードです:そのそう正しく動作している場合、私は自分のコードをテストしたい

int Edit = 0; 

    for (Edit = 0; Edit < 3; Edit++) { 
     printf("Input Student Data\n\n"); 

     printf("Student Number:"); 
     scanf_s("%d", &Student[Edit].Student_Number); 

     printf("Name:"); 
     scanf_s(" %s", Student[Edit].Student_Name, 20); 

     printf("PE:"); 
     scanf_s(" %c", &Student[Edit].PE, 1); 

     printf("Social Studies:"); 
     scanf_s(" %c", &Student[Edit].Social, 1); 

     printf("Math:"); 
     scanf_s(" %c", &Student[Edit].Math, 1); 

     printf("Science:"); 
     scanf_s(" %c", &Student[Edit].Science, 1); 

     printf("English:"); 
     scanf_s(" %c", &Student[Edit].English, 1; 
     printf("\n\n\n"); 
    } 

は、 ここ学生コード[0]を表示するコードです:

printf("\n\n\n"); 
    printf("Student Number:%d\n", Student[0].Student_Number); 
    printf("Name:%s\n", Student[0].Student_Name); 
    printf("PE:%c\n", &Student[0].PE); 
    printf("Social Studies:%c\n", &Student[0].Social); 
    printf("Math:%c\n", &Student[0].Math); 
    printf("Science:%c\n", &Student[0].Science); 
    printf("English:%c\n", &Student[0].English); 
+1

です。 '%c'は文字列です。 – John3136

+0

@ John3136はそれを試みましたが、何らかの理由でscanf_sの一部をスキップし、異なる結果を出力します。 – syn3rgy

+0

@ user3121023これは試してみましたが、何とかPEの後にやっていますが、まだあなたが言ったコードを使って編集した元の投稿 – syn3rgy

答えて

1

私は私自身の問題への答えを見つけました。

scanf_s("%hhd", &Student[Edit].PE); 

scanf_s(" %c", &Student[Edit].PE, 1); 

をし、学生[0]の結果を表示する:変更します。変更:

printf("PE:%c\n", &Student[0].PE); 

printf("PE:%hhd\n", Student[0].PE); 

するにはを参照してください: `%のS`は、文字列を Converting an int to char using printf

1

深刻な間違い

struct StudentInfos{ 
    unsigned int Student_Number; 
    char Student_Name[20]; 
    char PE; 
    char Social; 
    char Math; 
    char Science; 
    char English; 

}; 

宣言では、それをcharと宣言し、文字列として読み込んでいますか?

scanf_s("%s", &Student[Edit].Social, 3);

+0

はい、私はすでに編集しましたが、まだ動作していません..上記参照 – syn3rgy

+0

テスト目的のために – Anjaneyulu

+0

を得ました。私は乱数を入力しましたが、最初の桁のみを出力します。たとえば68の場合、プログラムは6だけを表示します。 – syn3rgy

関連する問題