2014-11-05 2 views
1

По какой-то причине я продолжаю получать нечетную ошибку времени выполнения при запуске этой программы. Он отлично компилируется, и большая часть программы работает.Нечетная ошибка времени выполнения в C?

Код:

#include <stdio.h> 
#include "genlib.h" 
#include "simpio.h" 
#include <string.h> 

main() 
{ 
    printf("This program will show you the scores of the basketball games for 1 season.\n"); 
    printf("What is the name of the basketball league? "); 
    string league = GetLine(); 
    printf("How may games were played by the group? "); 
    int gamesplayed = GetInteger(); 
    string teams[3]; 
    int wonGames[3]; 
    int a, b, c; 
    for (a = 0; a < 4; a++) 
    { 
     printf("What is team %d's name? ", a+1); 
     teams[a] = GetLine(); 
    } 
    for (b = 0; b < 4; b++) 
    { 
     printf("How many times did team %s win? ", teams[b]); 
     wonGames[b] = GetInteger(); 

    } 

    printf("\n\n ----===[%s]===----\n", league); 
    printf("Team Name | Games Played | Games Won | Percentage"); 
    for(c = 0; c < 4; c++) 
    { 
     double percent = 100 * (wonGames[c]/gamesplayed); 
     printf("| %s | %d | %d | %lf |", teams[c], gamesplayed, wonGames[c], percent); 
    } 

} 

Проблема, кажется, с печатью teams[3] в последний цикл. Независимо от того, что я делаю это не выходит из строя после того, как он печатает printf("Team Name | Games Played | Games Won | Percentage");

Библиотека GetInteger() и GetLine() являются две функции я использую, чтобы получить вход, его из simpio.h библиотеки. Любая помощь будет оценена по достоинству.

EDIT: Если индексирование массива начинается с 0, то команды shouldnt [3] имеют четыре элемента? (0, 1, 2, 3)

+1

В массиве 'teams' имеется только три записи, поэтому нет' команд [3] '. То же самое касается 'wonGames'. –

+0

Я предлагаю вам #define numEntries (4), затем измените определения массива на использование numEntries и измените ваши (-ы) выражения для использования numEntries – user3629249

+0

, предполагая, что GetLine() и GetInteger() являются вашими личными функциями, я ожидаю, что GetLine() для возврата указателя на выделение памяти malloc'd, где выделенная память содержит строку или целое число. Поэтому «строка-лига» должна быть (если предположить, что «строка» является допустимым типом) «строка * лига» – user3629249

ответ

6
string teams[3]; 
for (a = 0; a < 4; a++) 
{ 
    printf("What is team %d's name? ", a+1); 
    teams[a] = GetLine(); 
} 

Вы выходите за пределы, так как teams имеет размер 3 и a в конечном итоге получить значение 3.

Индексация начинается от 0 до размера массива - 1. Таким образом, изменение 4 с 3, или увеличьте размер на единицу.

Сделайте то же самое для wonGames.

Аналогично, цикл с счетчиком c также должен быть изменен (если размер массива не увеличивается).


Ответа на этот вопрос для редактирования.

В: Если индексирование массива начинается с 0, то должны ли команды [3] для элементов? (0, 1, 2, 3)

A: NO. Массив имеет размер 3, поэтому он может содержать 3 элемента, первый - в 0-й ячейке, второй в 1-й ячейке и третий во 2-й ячейке.

2

Ваш массив «команд» имеет три элемента. В вашем контуре печати доступны четыре элемента.

Смежные вопросы