2016-10-19 41 views
2

奇妙なタイトルには申し訳ありませんが、英語は第1言語ではありません。 私は2週間のコーディングを学んだので、私はこのテーマの初心者です。複数のループ入力からの出力を印刷する

だから、私の問題を始めましょう。

これは私がプログラムするはずのものです。 Correct Output

これまでのところ、これは私ができることです。 My Ouput

が、これは私のコードです:

#include <stdio.h> 
#include <string.h> 
int main() { 

float stud_total; 
float stud_score; 
char stud_name[50]; 
float stud_total_score = 0; 
char max_name[50] = "test"; 
float max_score = 55; 
float min_score = 50; 
float avg_score; 
char temp_name[50] = "dwdw"; 

//Start of Total Student between 2-10 looping 
do { 

    printf("Input Total Student [2..10] : "); 
    scanf("%f", &stud_total);fflush(stdin); 
} while (stud_total < 2 || stud_total>10); 
//end of Total student looping 
printf("\n"); 


//Start Name & Score Input Looping 
for (int i = 1;i <= stud_total;i++) { 

    do { 
     printf("Input Name for Student %d [3..50] : ", i); 
     scanf("%s", stud_name);fflush(stdin); 
    } while (strlen(stud_name) < 3 || strlen(stud_name) > 50); 

    do { 
     printf("Input Score for Student %d [0..100] : ", i); 
     scanf("%f", &stud_score);fflush(stdin); 
    } while (stud_score < 0 || stud_score>100); 

    if (stud_score < max_score) { 
     min_score = stud_score; 
     memset(min_name, '\0', sizeof(min_name)); 
     strcpy(stud_name, stud_name); 
     strcpy(min_name, stud_name); 
    } 
    else if (stud_score >= min_score) { 
     max_score = stud_score; 
     memset(max_name, '\0', sizeof(max_name)); 
     strcpy(stud_name, stud_name); 
     strcpy(max_name, stud_name); 
    } 

    stud_total_score = stud_total_score + stud_score; 

    memset(temp_name, '\0', sizeof(temp_name)); 
    strcpy(stud_name, stud_name); 
    strcpy(temp_name, stud_name); 
} 

//Math part 
avg_score = stud_total_score/stud_total; 
//END of Name & Score Input Looping 

    //Start of Score Table 

for (int k = 1;k <= 50;++k) { 
    printf("-"); 
} 
printf("\n%-4s %-32s %3s\n", "No.", "Nama", "Nilai"); 

for (int k = 1;k <= 50;++k) { 
    printf("-"); 
} 
for (int j = 1;j <= stud_total;++j) { 
    printf("\n%-4d %-32s %3.2f", j, temp_name, stud_score); 
} 



//END of Score Table 




//Start of conlusion 
printf("\n"); 
printf("\n"); 
printf("Highest score is %.2f achieved by %s\n", max_score, max_name); 
printf("Lowest score is %.2f obtained by %s \n", min_score, min_name); 
printf("Student Average : %.2f", avg_score); 

//end of conclusion 



getchar(); 
getchar(); 
return 0;} 

私の質問のループの内側からの入力は、ループ後に印刷することができるように、どのように私はテーブルを作るのですか?

あなたが良いアイデアを持っているか教えてください。

私はループ内にテーブルを置こうとしましたが、あなたがすでに知っているようにそれはまったく助けになりません。

+1

。あなたのコードがCにのみ関連する場合、タグCのみ。 – CoryKramer

+0

迷惑メールのタグを... C++、C#、およびCは**同じ言語ではありません**同じ言語 – amanuel2

+0

私の悪いです。 ........ – kein

答えて

0

私はあなたがしたいことは、最初に生徒の数を取得し、次に彼らの名前とマークを取得し、最終的にavg、max、minなどを計算すると思いますか?

ベストアプローチは構造を使用しています。あなたが新しく追加されたので、何を行うことができますすることです。

  1. は文字の2D配列を作成します。

    char name[100][100], marks[100]. 
    
  2. を変数nにおける学生の数を取得します。

  3. は名前やマークを取得するためにループを使用します。

    for(i=0;i < n;i++){scanf("%s",name[i]);} 
    scanf("%d",marks[i]); 
    
  4. 今、あなたは、printf関数に同じループ、変更scanf関数を使用して印刷することができます。平均、最大と最小の場合

  5. 、のように、マークを反復処理:これはC++ではありません、それはそういずれかのタグを付けないでください、C#のではありません

    marks = 0; 
    for(i=0;i< n;i++){sum = sum + marks[i];} 
    printf("%d",marks); 
    
+0

ありがとうございます!私はコードを使用しませんでしたが、私は主なアイデアを持って、私の割り当てを完了することができます!感謝alot – kein

+0

ようこそ。 :)あなたがこれが問題を解決したと思うなら、あなたは解決策としてそれをマークできますか? – lU5er

+1

これは基本的には良い答えですが、原則として私はバッファオーバーフローを防ぐCの答えをupvoteしません。あなたは 'scanf'を安全に使っていません。 OPも安全ではないが、このエラーは複製されるよりもむしろ指摘されるべきである。 –

関連する問題