Je reçois une boucle infinie lorsque j'utilise le code suivant en C++ et je ne comprends pas pourquoi. Je suspecte que le problème est dans la fonction input_words()
. Voici le code:C++ Unwanted infinite while loop
#include<iostream>
using namespace std;
string input_words(int maxWords) {
int nWord = 0;
string words[maxWords];
string aWord = "";
while (aWord != "Quit" && nWord < maxWords) {
cout << "Enter a number ('Quit' to stop): ";
getline (cin, aWord);
words[nWord] = aWord;
nWord++;
}
return *words;
}
int num_words (string words[], int maxWords) {
int numWords = 0;
for (int i=0; i<maxWords; i++) {
if (words[i] == "Quit") {
break;
}
numWords++;
}
return numWords;
}
int main() {
const int MAX_WORDS = 100;
string words[MAX_WORDS] = input_words(MAX_WORDS);
int lenWords = num_words(words, MAX_WORDS);
cout << "\nThere are " << lenWords << " words:\n";
for (int i=0; i<MAX_WORDS; i++) {
if (words[i] == "Quit") {
break;
}
cout << words[i] << "\n";
}
return 0;
}
Plus précisément, je ne peux pas sortir, même quand je tape « Quitter » lorsque vous êtes invité pour un mot. Comment pourrais-je résoudre ceci? Je sais que ce code est Noob :) Je viens juste de commencer sur
Cela devrait fonctionner correctement. En outre, il s'agit d'une extension, et non C++: 'string mots [maxWords];' Dans les tableaux C++ ont une taille constante. Si vous voulez un tableau dynamique, vous devriez utiliser 'std :: vector', et ajouter des choses avec 'push_back'. Cela supprime également votre besoin d'une taille maximale. Enfin, ceci: 'return * words; 'va retourner seulement la première chaîne. Peut-être que votre intention était de retourner le tableau entier, auquel cas faites votre type de retour 'std :: vector ' et renvoyez le vecteur. –
GManNickG
@GMan: afaik g ++ prend en charge des tableaux de taille dynamique sur la pile, mais sachez que cela n'est pas conforme à la norme. – JPvdMerwe
Merci beaucoup GMan! Je pense que vous auriez dû poster (ou poster) ceci comme réponse. Je viens de poster une nouvelle question sur la déclaration d'un vecteur avant de lire votre commentaire. J'ai aussi pensé qu'un vecteur était la solution, mais je n'ai pas réussi à le déclarer. – Morlock