проблема логики или что-то еще? - PullRequest
1 голос
/ 04 ноября 2011

Моя программа имитирует видеомагазин.В моем списке есть несколько копий некоторых видео.Если я пытаюсь взять напрокат видео, и первая копия этого видео в списке уже сдана в аренду, моей программе не удается продолжить проверку наличия других копий (фильм доступен, если custId равен «0000»).Взгляните на текстовый файл, откуда список получает своих членов, чтобы лучше понять, что я описываю:

enter image description here

Может ли кто-нибудь взглянуть и сообщить мне, еслиони замечают проблему?Спасибо за любую помощь, спасибо.

Код от основного

 try
 {
     int index = 0;
     bool found = false;

     while (!found)
     {
         if (strncmp(filmId,filmList.getAt(index).number,6) == 0 && strncmp("0000",filmList.getAt(index).rent_id,5) == 0)//If that film is rented by NO customer
         {
             found = true;//customer can rent it

             strcpy(newItem.number,filmId);//copy filmId into newItem
             filmList.retrieve(newItem);//copy the struct in our orderedList with the same filmId/copy into newItem
             filmList.remove(newItem);//delete the struct with same filmId/copy as newItem from the orderedList
             strcpy(newItem.rent_id,custId);//update info in
             strcpy(newItem.rent_date,rentDate);//           newItem to show
             strcpy(newItem.return_date,dueDate);//                          that it has been rented
             filmList.insert(newItem);//put NewItem into list, effectivily replacing the removed item.

             cout << "Rent confirmed!" << endl;
         }
         else
         {
             if (strncmp(filmId,filmList.getAt(index).number,6) > 0 || strncmp("0000",filmList.getAt(index).rent_id,5) > 0)
             {
                 ++ index;
             }
             else
             {
                 throw string ("Not in list");
             }
         }
     }
 }
 catch (string s)
 {
     cout << "\n***Failure*** " << s << endl;
 }

Дайте мне знать, требуется ли больше кода из каких-либо других частей программы.

1 Ответ

0 голосов
/ 04 ноября 2011

Вот мое лучшее предположение с предоставленным кодом.

Допустим, мы ищем 101001Casablanca, поэтому я предполагаю, что filmId = "101001Casablanca". Кроме того, предположим, что 101001Casablanca извлечен для клиента 0001. Мы сравниваем первые 6 символов filmId с filmList.getAt (index) .number, который, как я собираюсь предположить, находится как минимум на уровне «101001». Это проходит, но поскольку оно проверено, второе условие не выполняется.

В остальном мы проверяем те же строки в первом условии и по-прежнему возвращаем 0 из strncmp, что является ложью. Второе условие также ложно, так как strncmp («0000», «0001», 5) равен -1. Поэтому мы идем в финал, который бросает.

Если вы проверяете равенство строк только с помощью strncmp, помните, что он может возвращать -1, поэтому проверьте, равен или не равен 0.

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