(Проблема с массивом C ++) Я хочу распечатать заказанные продукты с помощью числового кода, введенного во время процесса DoWhile - PullRequest
1 голос
/ 06 апреля 2020

Я введу: (Цифры - это код питания, Y / N - да / нет для выполнения)

1
Y
2
Y
3
N

Тогда мой ожидаемый результат будет

Chicken
Fries
Hotdog

Пожалуйста, смотрите мой код, он ничего не печатает. Моя идея будет заключаться в том, чтобы каждый раз, когда я вводил число, оно запускало функцию переключения, а затем переменная с подготовленным значением (например: order2 = fries) будет сохраняться в массиве. Таким образом, при зацикливании я буду вводить несколько ордеров и хочу распечатать их (см. Ожидаемый результат выше)

#include <iostream>
using namespace std;

int main() {
int ordercode;
int i;
int limit;
char yesno;
char allorder[10][100];
string order1="Chicken";
string order2="Fries";
string order3="Hotdog";
do 
{
limit++;
i++;
cout<<" Enter order ";
cin>>ordercode;
switch(ordercode){
    case 1:
        order1 == allorder[i];
        break;
    case 2:
        order2 == allorder[i];
        break;
    case 3:
        order3 == allorder[i];
        break;
}
cout<<"Will you order again?";
cin>>yesno; 
}

while(yesno == 'Y');

for(i = 0; i<limit; i++)
{

    cout <<allorder[i];
    cout<<"\n";
}
}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

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

int i = 0;

int limit = 0;

string allorders[10];

allorders[i] = "Chicken";

allorders[i] = "Fries";

allorders[i] = "Hotdog";
0 голосов
/ 06 апреля 2020

Вы не инициализируете нулями i. Простая запись

int i;

не обязательно обнулит i. Это может вызвать ошибки сегментации, когда вы пытаетесь использовать i в качестве индекса в массиве - я могу иметь значение что угодно , так что это может go выйти за пределы. Вам нужно написать

int i = 0;

Сделайте то же самое с лимитом.

Кроме того,

allorder[i] = order1;

должна быть этой строкой. Кроме того, почему вы объявляете allorder как 10x100, если вы индексируете его по одному индексу? Удалить одно из измерений. Кроме того, сделайте allorder в массиве строк, а не в символах, поскольку вы присваиваете строки его элементам.

Вы уже используете C ++, поэтому нет смысла использовать старые конструкции C, когда существуют альтернативы , Используйте вектор, а не массив или строковый массив. Вы можете посмотреть, как использовать эти функции C ++, которые гораздо более гибки и функциональны, чем те, которые вы используете сейчас, во многих разных местах. Сайты cppreference.com и cplusplus.com - два больших, которые я использую.

О, и используйте отступы! Пожалуйста! :)

...