2016-10-07 1 views
1

Mein Array druckt nicht alle Daten aus, nur was auch immer zuletzt eingegeben wurde. Die Daten sollten so etwas wie diese Für die Matrikelnummer, wenn nicht genug Zahlen eingegeben werden, 0'en automaticaly in gesetzt wird gedruckt.Das meiste Programm funktioniert, aber mein Array druckt nicht so, wie es sollte

/* 
Name: 
Date: 10/06/2016 
Workshop 4 
*/ 
#include <stdio.h> 

int main(void) 
{ 
    int counter; 
    int marks [40]; 
    float num_grades = 0; 
    int row = 1; 
    float sum = 0; 
    float average = 0; 
    int pass = 0; 
    int fail = 0; 
    float pass_sum = 0; 
    float fail_sum = 0; 
    float pass_average = 0; 
    float fail_average = 0; 
    float biggest = 0; 
    float smallest = 0; 

    //int grade[40]; 
    int student_num[40]; 

    printf("  ---=== IPC mark Analyser V2.0 ===---\n"); 

    printf("Please enter the number of students(between 3 and 40): "); 
    scanf("%d", &counter); 


    while (counter >40 || counter <3) 
    { 
     printf("Invalid number, enter a number between 3 and 40 inclusive: "); 
     scanf("%d", &counter); 

    } 

    printf("Row Std No Mrk\n"); 
    printf("--- --------- ---\n"); 

    num_grades = counter; 
    while (counter > 0) 
    { 
     printf("%d ", row); 
     printf("_____________ ___\r%3d ", row); 
     scanf("%d", &student_num[40]); 
     scanf("%d", &marks[40]); 
     row++; 
     counter--; 
     sum += marks[40]; 
    } 

    for (int i = 0; i < num_grades; i++) 
    { 
     printf("%03d %09d %3d\n", row, student_num[40], marks[40]); 
    } 


    average = sum/num_grades; 

    printf("-----------------\n"); 
    printf("-----------------\n"); 
    printf("Marks Entered, printing results:\n"); 
    printf("Row Std No Mrk\n"); 
    printf("--- --------- ---\n"); 


    printf("The average of all marks in this group is %.1f.\n", average); 
    printf("Program Ended.\n"); 


    return 0; 
} 

Antwort

2

Du bist immer Lesen/Index Schreiben 40 in den student_num und marks Arrays, so alles geht an den gleichen Ort.

Tatsächlich sind die gültigen Indizes eines Arrays der Größe 40 0 ​​bis 39, also lesen/schreiben Sie das Ende des Arrays tatsächlich ab, was undefined behavior verursacht.

Sie müssen an jeder Stelle den richtigen Index verwenden. Verwenden Sie in der Druckschleife i. Verwenden Sie in der Leseschleife eine Variable, die bei 0 beginnt, bis counter.

num_grades = counter; 
for (int i = 0; i < num_grades; i++) 
{ 
    printf("%d ", i + 1); 
    printf("_____________ ___\r%3d ", i + 1); 
    scanf("%d", &student_num[i]); 
    scanf("%d", &marks[i]); 
    sum += marks[i]; 
} 

for (int i = 0; i < num_grades; i++) 
{ 
    printf("%03d %09d %3d\n", row, student_num[i], marks[i]); 
} 
Verwandte Themen