Как мне выйти из цикла, если пользователь вводит определенное слово в структуру?C ++ - PullRequest
2 голосов
/ 19 марта 2012

В основном, программа запрашивает введенное пользователем имя продукта, которое будет введено в структуру. Однако, если введено имя «выход» (без кавычек), цикл должен завершиться. Вот полный код:

#include <iostream>
#define maxNum 9
using namespace std;

struct Products{
       char name [20];
       int modelNumber;
       float price;
       } products [maxNum];

void productsDisplay (Products products);

int main()
{
    int i;
    int k;
    cout << "Enter up to 10 product details.\n"
         << "Enter quit as product name to exit the program.\n";

         for (i = 0; i <= maxNum; i++)
         {
              cout << "Enter the product name: ";
              cin >> products[i].name;
              if (products[i].name == "quit")
                 break;
              cout << "Enter the model number: ";
              cin >> products[i].modelNumber;
              cout << "Enter the price: ";
              cin >> products[i].price;
              cout << endl;
          }

    for (k = 0; k <= i; k++)
    {
        productsDisplay (products[k]);
    }

    system("pause");
    return 0;
}

void productsDisplay (Products products)
{
     cout << "Product name: " << products.name << endl;
     cout << "Model number: " << products.modelNumber << endl;
     cout << "Product price: $" << products.price << endl;
     cout << "----------------------\n";
} 

Основная проблема в этом бите:

 for (i = 0; i <= maxNum; i++)
             {
                  cout << "Enter the product name: ";
                  cin >> products[i].name;
                  if (products[i].name == "quit")
                     break;

На самом деле все работает нормально, за исключением того, что когда я ввожу "quit", программа не выходит из цикла for и продолжается до его завершения. Решение, вероятно, заключается в использовании вместо этого строкового типа и оператора "strcopy", но я не слишком уверен, как правильно их реализовать. Я весьма озадачен этой проблемой и был бы признателен за любую помощь в ее устранении, спасибо за чтение.

1 Ответ

5 голосов
/ 19 марта 2012

Сравнение

products[i].name == "quit"

не так.

Вам нужно использовать strcmp (или strncmp, как указал Вайбхав):

if ( strcmp(products[i].name,"quit") == 0 ) //0 indicates equality
      break;

Но так как это C ++, я предлагаю вам использовать std::string вместо char[].

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