Превратите 1 C ++ Loop в 2 - PullRequest
       17

Превратите 1 C ++ Loop в 2

1 голос
/ 06 декабря 2010

Мне нужна небольшая помощь в программировании для класса.Я написал код ниже, но мой учитель говорит, что мне нужно использовать 2 для циклов при чтении файла данных.Я не уверен, как это сделать ... какие-либо предложения?

Мой код:

ifstream infile;
infile.open("dive.txt");
for(int i = 0; i <= 6; i++)
    infile >> contestantNames[i][0] >> contestantNames[i][1] >> judgeScores[i][0] >> judgeScores[i][1] >> judgeScores[i][2] >> judgeScores[i][3] >> judgeScores[i][4] >> judgeScores[i][5] >> judgeScores[i][6] >> judgeScores[i][7];
infile.close();

Ответы [ 7 ]

3 голосов
/ 06 декабря 2010

Вместо многократного написания

infile >> contestantNames[0][0] >> contestantNames[0][1] >> judgeScores[0][0] >> judgeScores[0][1] >> judgeScores[0][2] >> judgeScores[0][3] >> judgeScores[0][4] >> judgeScores[0][5] >> judgeScores[0][6] >> judgeScores[0][7];
infile >> contestantNames[1][0] >> contestantNames[1][1] >> judgeScores[1][0] >> judgeScores[1][1] >> judgeScores[1][2] >> judgeScores[1][3] >> judgeScores[1][4] >> judgeScores[1][5] >> judgeScores[1][6] >> judgeScores[1][7];
infile >> contestantNames[2][0] >> contestantNames[2][1] >> judgeScores[2][0] >> judgeScores[2][1] >> judgeScores[2][2] >> judgeScores[2][3] >> judgeScores[2][4] >> judgeScores[2][5] >> judgeScores[2][6] >> judgeScores[2][7];
infile >> contestantNames[3][0] >> contestantNames[3][1] >> judgeScores[3][0] >> judgeScores[3][1] >> judgeScores[3][2] >> judgeScores[3][3] >> judgeScores[3][4] >> judgeScores[3][5] >> judgeScores[3][6] >> judgeScores[3][7];
infile >> contestantNames[4][0] >> contestantNames[4][1] >> judgeScores[4][0] >> judgeScores[4][1] >> judgeScores[4][2] >> judgeScores[4][3] >> judgeScores[4][4] >> judgeScores[4][5] >> judgeScores[4][6] >> judgeScores[4][7];
infile >> contestantNames[5][0] >> contestantNames[5][1] >> judgeScores[5][0] >> judgeScores[5][1] >> judgeScores[5][2] >> judgeScores[5][3] >> judgeScores[5][4] >> judgeScores[5][5] >> judgeScores[5][6] >> judgeScores[5][7];
infile >> contestantNames[6][0] >> contestantNames[6][1] >> judgeScores[6][0] >> judgeScores[6][1] >> judgeScores[6][2] >> judgeScores[6][3] >> judgeScores[6][4] >> judgeScores[6][5] >> judgeScores[6][6] >> judgeScores[6][7];

Вы написали for цикл.

Где еще повторение?

2 голосов
/ 06 декабря 2010

Ваши два цикла for будут

for (int i = 0; i <= 6; i++) {
    infile >> contestantNames[i][0] >> contestantNames[i][1];
    for (int j = 0; j <= 7; j++) {
        infile >> judgeScores[i][j];
    }
}

Ваш инструктор хочет, чтобы вы упростили эту непрерывную линию judScores в цикл for, который намного проще и проще для чтения.

1 голос
/ 06 декабря 2010
ifstream infile;
infile.open("dive.txt");

for (int i = 0; i <= 6; i++)
{
  infile >> contestantNames[i][0] >> contestantNames[i][1];

  // The next part is what your teacher was talking about.
  // You wrote judgeScores[i][0] >> judgeScores[i][1] >> ...
  // seven times, which is pretty redundant. Programmers are *extremely* lazy
  // so we loop constantly, wherever possible:

  for (int j = 0; j <= 7; j++)
  {
     infile >> judgeScores[i][j];
  }
}

infile.close();
0 голосов
/ 06 декабря 2010

Установите проверку цикла на конец файла (EOF), если в нем более 6 строк.Тестовые случаи для плохих данных также не повредят.

0 голосов
/ 06 декабря 2010

Удивите своего учителя даже тремя петлями:

ifstream infile;
infile.open("dive.txt");
for(int i = 0; i <= 6; i++)
{
    for (int j = 0; j < 2; ++j)
    {
        infile >> contestantNames[i][j];
    }

    for (int j = 0; j < 8; ++j)
    {
       infile >> judgeScores[i][j];
    }
}
infile.close();
0 голосов
/ 06 декабря 2010

Ваш учитель, вероятно, хочет, чтобы вы рассмотрели случай, когда существует более двух констант. Что-то вроде

nc = 6;  // the number of contenstans
for (int c=0; c<nc; c++) {
  // other for loop here...
}
0 голосов
/ 06 декабря 2010

Я думаю, что ваш инструктор имеет в виду один цикл для всех участников и цикл снова для ввода информации о каждом участнике (имя и оценка).

Итак, попробуйте что-то вроде этого:

ifstream infile;
infile.open("dive.txt");
for(int i = 0; i <= 6; i++) {
    infile >> contestantNames[i][0] >> contestantNames[i][1];
    for (int j = 0; i <= 7; j++) {
         infile >> judgeScores[i][j];
    }
}
infile.close();

Примечание: квадратные скобки не обязательны, поскольку каждый оператор состоит из одной строки. Однако это исключение из правила - если в цикле for содержится более 1 оператора, то скобки потребуются . (Как вы, возможно, знаете.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...