2016-01-21 4 views
-4

J'ai trouvé un post où la boucle FOR est utilisée sans valeur CONDITION. Voici une boucle:Boucle FOR sans valeur de condition "for (int i = 1 ;; i ++)" ne fonctionne pas correctement

for (INITIALIZATION; CONDITION; AFTERTHOUGHT) 
{ 
    // Code for the for-loop's body goes here. 
} 

Ce n'est pas sûr d'ignorer la valeur de condition, mais si vous utilisez la déclaration if/else il peut être fait. S'il vous plaît jeter un oeil sur ma boucle pour: for (int i = 1; ; i++) et la mise en œuvre à l'intérieur. Pour une raison quelconque, je ne reçois pas la logique appropriée avec l'instruction if/else.

#include <iostream> 
using namespace std; 

int main() { 

    int boxes; 
    int boxes_for_sale; 

    cout << "Enter quantity of the boxes in warehouse: > " << flush; 
    cin >> boxes; 
    cout << "Enter quantity of the boxes for sale: > " << flush; 
    cin >> boxes_for_sale; 

    for (int i = 1;; i++) { 

     if (boxes < boxes_for_sale) { 
      cout << "There are not enough boxes in warehouse!" << endl; 
      cout << "Enter quantity of the boxes for sale: > " << flush; 
      cin >> boxes_for_sale; 
     } 
     else 
      boxes -= boxes_for_sale; 
      cout << "Car N:" << i << " is full\n" << "You have " << boxes << "boxes for sale" << endl; 

     if (boxes == 0) 
      cout << "Sold out!" << endl; 
      break; 

    } 
    return 0; 
} 
+8

Il vous manque des accolades '{' '}' dans quelques endroits. – 1201ProgramAlarm

+3

Comme le dit @ 1201ProgramAlarm, vous avez besoin d'accolades autour de votre code en suivant les instructions if et else. En outre, "cela ne fonctionne pas correctement" n'est pas une bonne description du problème. Vous devez ajouter des informations sur * comment * cela ne fonctionne pas et ce que vous attendiez. –

Répondre

1

Désolé, les gars pour le manque de description. C'est ma première question ici, je serai plus précis la prochaine fois.

C'est ce que j'ai essayé de faire.

int main() { 

    int boxes_in_warehouse; 
    int boxes_for_sale; 
    cout << "Enter quantity of the boxes in warehouse: " << flush; 
    cin >> boxes_in_warehouse; 
    cout << "Enter quantity of the boxes for sale: " << flush; 
    cin >> boxes_for_sale; 

    if (boxes_in_warehouse < boxes_for_sale) { 
     cout << "No, Enter quantity of the boxes for sale: " << flush; 
     cin >> boxes_for_sale; 
    } 

    boxes_in_warehouse -= boxes_for_sale; 

    while (boxes_in_warehouse > 0) { 
     cout << "You have " << boxes_in_warehouse << " left" << endl; 
     cout << "Please enter quantity of the boxes for sale again" << endl; 
     cin >> boxes_for_sale; 
     boxes_in_warehouse -= boxes_for_sale; 
    } 

    cout << "we are sold out" << endl; 
    return 0; 
} 

Le code censé fonctionner jusqu'à boxes_in_warehouse == 0 signifie épuisé. Si vous pouvez optimiser mon dernier code, je serai heureux de voir votre version.

+0

Trois choses à noter: ce n'est pas vraiment une réponse. Cela fonctionnerait mieux comme un additif à votre question. Ensuite, notez que vous ne testez pas que 'boxes_for_sale' est inférieur ou égal à' boxes_in_warehouse' dans la boucle while, ce qui permet d'obtenir des résultats vraiment douteux.Troisièmement, aucun des 'cin >>' n'est testé pour s'assurer que l'utilisateur met des nombres valides. L'utilisateur peut entrer un non-numéro et casser votre programme, le piégeant probablement dans une boucle infinie, mais le résultat de la lecture de cin quand il est dans un état d'erreur est indéfini. – user4581301

+0

Merci pour les commentaires, c'est une information utile pour moi. Comment puis-je tester cin >> pour un numéro valide? –

+0

Voir [Pourquoi appelons-nous cin.clear() et cin.ignore() après avoir lu l'entrée?] (Http://stackoverflow.com/questions/5131647/why-would-we-call-cin-clear-and- cin-ignore-after-reading-input) pour un bon exemple et comment nettoyer après une mauvaise entrée. 'while (! cin >> boxes_in_warehouse) {cout <<" mauvaise entrée. Réessayez "<< endl; cin.clear(); cin.ignore (std :: numeric_limits :: max(), '\ n');} 'continuera à demander un nombre jusqu'à ce que l'utilisateur en fournisse un. Il y a encore quelques petites choses qui ne vont pas (l'utilisateur peut toujours mettre des nombres et des nombres incroyablement longs suivis de merde) mais devrait couvrir ce dont vous avez besoin – user4581301

1
#include <iostream> 
using namespace std; 

int main() { 

    int boxes; 
    int boxes_for_sale; 

    cout << "Enter quantity of the boxes in warehouse: > " << flush; 
    cin >> boxes; 
    cout << "Enter quantity of the boxes for sale: > " << flush; 
    cin >> boxes_for_sale; 

    for (int i = 1;; i++) { 

     if (boxes < boxes_for_sale) { 
      cout << "There are not enough boxes in warehouse!" << endl; 
      cout << "Enter quantity of the boxes for sale: > " << flush; 
      cin >> boxes_for_sale; 
     } 
     else{ 
      boxes -= boxes_for_sale; 
} 
      cout << "Car N:" << i << " is full\n" << "You have " << boxes << "boxes for sale" << endl; 

     if (boxes == 0) 
{   cout << "Sold out!" << endl; 
      break;} 

    } 
    return 0; 
} 
+0

Explication de ce que vous avez fait et pourquoi fortement recommandé. – user4581301

4

Puisque vous ne spécifiez pas le comportement souhaité du programme, je ne fait état que ce qui se passe dans le code en ce moment.

extraits importants du code qui font peut-être quelque chose d'inattendu:

for (int i = 1;; i++) 

Ceci est parfaitement légal, mais il faut noter qu'il n'y a pas condition de terminaison spécifiée. vous allez courir dans une boucle infinie sauf si vous en sortez.

else 
    boxes -= boxes_for_sale; 
    cout << "Car N:" << i << " is full\n" << 
    "You have " << boxes << "boxes for sale" << endl; 

je peux deviner basée sur l'empreinte que vous voulez que les deux lignes à exécuter que lorsque l'instruction if précédant le else est faux, mais ce n'est pas ce qui se passe.

Étant donné que vous n'avez pas spécifié le bloc else avec des accolades, seule la première instruction après le else s'exécutera lorsque vous en aurez besoin. Le cout exécutera toujours.

Vous avez le même problème avec:

if (boxes == 0) 
     cout << "Sold out!" << endl; //will output only if boxes==0 
     break; //will break out of loop in any case 
1

Prenez soin d'accolades, vous devez mettre des accolades pour chaque boucle, si la déclaration de déclaration et d'autre.

Essayez également de prendre soin de l'indentation pour une bonne pratique de programmation.

#include <iostream> 
using namespace std; 

int main() 
{ 

    int boxes; 
    int boxes_for_sale; 

    cout << "Enter quantity of the boxes in warehouse: > " << flush; 
    cin >> boxes; 
    cout << "Enter quantity of the boxes for sale: > " << flush; 
    cin >> boxes_for_sale; 

    for (int i = 1;; i++) { 

     if (boxes < boxes_for_sale) 
     { 
      cout << "There are not enough boxes in warehouse!" << endl; 
      cout << "Enter quantity of the boxes for sale: > " << flush; 
      cin >> boxes_for_sale; 
     } 
     else 
     { 
      boxes -= boxes_for_sale; 
      cout << "Car N:" << i << " is full\n" << "You have " << boxes <<  boxes for sale" << endl; 
     } 
     if (boxes == 0) 
     { 
      cout << "Sold out!" << endl; 
      break; 
     } 

    } 
    return 0; 
}