2010-12-06 44 views
1

J'ai besoin d'une petite aide à la programmation pour la classe. J'ai écrit le code ci-dessous, mais mon professeur dit que j'ai besoin d'utiliser 2 pour les boucles lors de la lecture du fichier de données. Je ne suis pas sûr de savoir comment faire ça ... des suggestions?Transformez 1 Boucle C++ en 2

Mon code:

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(); 
+1

Votre enseignant vous demande probablement d'utiliser deux boucles imbriquées, plutôt que de passer de 0 à 7 à la main. – thkala

+0

pouvez-vous s'il vous plaît poster votre exemple pour 100 candidats? (avec 'competantNames [100] [100]') – ruslik

Répondre

3

Au lieu d'écrire repetitiously

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]; 

vous écrit une boucle for.

Où d'autre est la répétition?

2

Vos deux pour les boucles serait

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]; 
    } 
} 

Votre instructeur veux que vous simplifiez cette ligne continue de judgeScores dans une boucle qui est beaucoup plus simple et plus facile à lire.

1
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

Je pense que votre instructeur signifie boucle une fois sur tous les participants, et la boucle à nouveau à l'entrée des informations de chaque concurrent

Donc, essayez quelque chose comme ça (le nom et le score.):

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(); 

Note: les parenthèses ne sont pas obligatoires, puisque chaque instruction est constituée d'une ligne. Ceci est l'exception à la règle, cependant - s'il y a plus d'une instruction dans la boucle for, les parenthèses seront requises. (Comme vous le savez peut-être.)

0

Votre enseignant vous demande probablement de considérer le cas où il y a plus de deux contenants. Quelque chose le long des lignes de

nc = 6; // the number of contenstans 
for (int c=0; c<nc; c++) { 
    // other for loop here... 
} 
0

Surprise vous enseignant même trois boucles:

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(); 
+1

Toute suggestion commençant par "surprendre votre professeur" devrait probablement envoyer immédiatement des drapeaux rouges. –

+0

@Cody Gray: Pourquoi pas? Je voulais dire dans le bon sens. Comme vous pouvez le voir, cette version est la seule ici, qui permet de changer plus facilement le nombre de «concurrents». Si j'étais l'enseignant, j'aurais aimé voir cette version. – detunized

0

Mettre une boucle tout en vérifiant pour la fin du fichier (EOF) dans le cas où il y a plus de 6 lignes. Les cas de test pour les mauvaises données ne seraient pas non plus douloureux.