#c #for-loop #sentinel
#c #for-цикл #sentinel
Вопрос:
Чтобы предоставить некоторый контекст, я очень новичок в программировании и C , поэтому я понимаю, что мой код, вероятно, не самый эффективный, и моя ошибка, вероятно, довольно проста. Это просто то, что я делаю для развлечения, и у меня особый интерес к музыке, так что именно это вдохновило меня на создание программ такого типа.
Я пытаюсь практиковать то, что я узнал в классе, чтобы улучшить свое кодирование. Я работаю над программой, которая будет: 1) получать название альбома от пользователя 2) получать от пользователя количество синглов, выпущенных с альбома 3) получать продажи альбома от пользователя 4) получать продажи каждого сингла от пользователя и 5) вычислятьобщий объем продаж альбомов и синглов с альбома.
Пока что мой код работает хорошо, но у меня возникают некоторые трудности с отдельными продажами, и я не уверен, как его закодировать, чтобы он работал правильно. Я хочу использовать цикл For, который запрашивает продажи каждого сингла. Внутри цикла у меня есть вложенный цикл while, чтобы прекратить сбор продаж для одного, когда пользователь вводит «1». Мой код хорошо работает для первого сингла, однако после того, как я ввожу «1», чтобы указать, что для первого сингла больше не нужно вводить продажи, цикл For просто выводит запрос о продажах следующих синглов, но не допускает никакой записи. Я знаю, что это из-за вложенного цикла while, который я включил, но я не знаю, как заставить цикл принимать ввод пользовательских продаж для каждого отдельного элемента, сохраняя при этом возможность отмечать конец ввода для каждого отдельного элемента, используя «1» в качестве sentinel.
Вот как выглядит программа при запуске цикла For и использовании моего собственного ввода:
«Каковы продажи одного # 1?
-5000000
-250000
-320000
-1
Каковы продажи одного # 2?
Каковы продажи одного # 3?
Каковы продажи одного # 4?
Каковы продажи одного # 5?
Единичные продажи составляют 5570000. »
Я указал, что с альбома было выпущено 5 синглов, но я могу ввести данные о продажах только для первого сингла. Как я уже упоминал, я знаю, что это происходит потому, что, когда я ввел 1, вложенный цикл while, который я использую для сбора продаж, завершается, а затем цикл For просто распечатывает написанный мной оператор cout. Тем не менее, я ищу способ закодировать это, чтобы я мог вводить продажи для всех 5 синглов.
Кто-нибудь знает, как я мог бы это исправить? Я ценю любую предложенную помощь и буду рад ответить на любые дополнительные вопросы, которые могут возникнуть у кого-либо. Я также включаю код, который я написал для функции, которая обрабатывает отдельные продажи, для справки, но я могу включить и весь свой код, если это будет полезно. Спасибо!
int singleSales(int numOfSingles)
{
//Holds single sales and accumulated sales
int singleSales = 0;
int totalSales = 0;
//Collects the single sales for each single as determined by user
for (int singleNum = 1; singleNum <= numOfSingles; singleNum )
{
cout << "nWhat are the sales of single #" << singleNum << "?n";
while (singleSales != 1) //Collects single sales while input is not 1
{
cin >> singleSales;
totalSales = singleSales; //Accumulates single sales
}
}
return totalSales - 1;
}
Ответ №1:
Значение вашей переменной singleSales
находится 1
в конце цикла. Итак, для любого singleNum
после первого, ваше while (singleSales != 1)
значение уже будет false, и вы никогда не достигнете cin
части.
Вам нужно установить int singleSales = 0;
внутри цикла for, а не снаружи.