Ich möchte ein Programm erstellen, das Partituren von Benutzern lesen und die Partiturausgabe in Form von Sternen anzeigen kann. Aber es scheint, dass mein Code immer eine Endlosschleife bekommt. Kann mir jemand sagen, was mit meiner Schleife falsch ist.
#include <stdio.h>
int main()
{
int i, k, j;
int score[5];
for(i = 1; i < 6; i++)
{
printf("\nplease enter the score for %d match: ", i);
scanf("%d", &score[i]);
}
printf("\nstatistics collection points for 5 matches\n\n");
for (k = 1; k < 6; k++){
printf("%d. ", k);
for(j = 1; j <= score[k]; j++){
printf("*");
}
printf("\n");
}
return 0;
}
Lösung des Problems
Array-Indizes basieren auf 0 in C. Für ein Array mit 5 Elementen liegen die Indizes also zwischen 0 und 4 einschließlich. Sie verwenden die Indizes 1-5, was zu einem Pufferüberlauf führt. Unten ist das korrigierte Programm mit den korrigierten for
Schleifen, um die richtigen Indizes zu verwenden:
#include <stdio.h>
#define NUM_SCORES 5
int main()
{
int i, k, j;
int score[NUM_SCORES];
for(i = 0; i < NUM_SCORES; i++)
{
printf("\nplease enter the score for %d match: ", i);
scanf("%d", &score[i]);
}
printf("\nstatistics collection points for 5 matches\n\n");
for (k = 0; k < NUM_SCORES; k++){
printf("%d. ", k);
for(j = 1; j <= score[k]; j++){
printf("*");
}
printf("\n");
}
return 0;
}
Sie sollten auch eine Überprüfung hinzufügen, um sicherzustellen scanf
, dass jede Eingabe erfolgreich gelesen werden kann.
Keine Kommentare:
Kommentar veröffentlichen