Предмет: Информатика, автор: anastasiyafomina353

С++
Подправьте пожалуйста код, чтобы strcpy_s работало

void CategoryTovar(char* category) {
char cat[][12]{
"Пряжа",
"Фурнiтура",
"Iнструменти",
};
int x;
do {
cout << "Оберіть категорiю (1 - Пряжа, 2 - Фурнiтура, 3 - Iнструменти): ";
cin >> x;
if (cin) {
if (x == 1 x == 2 x == 3) {
strcpy_s(category, cat[x - 1]);
cin.ignore();
break;
}
else {
cout << "Введіть число вiд 1 до 3!" << endl;
}
}
else {
cout << "Введiть число, а не інші символи!" << endl;
cin.clear();
cin.ignore(1000, '\n');
}
} while (true);
}​

Приложения:

Ответы

Автор ответа: falusytubejaste
0

Здесь есть несколько ошибок:

Неправильно записано условие для проверки x. Нужно использовать логический оператор || (или) вместо x, чтобы проверить, что x равно 1, 2 или 3.

В строке strcpy_s(category, cat[x - 1]); необходимо указать размер буфера, куда копируется строка cat[x - 1].

Вот исправленный код:

void CategoryTovar(char* category) {

const char cat[][12] = {

"Пряжа",

"Фурнiтура",

"Iнструменти"

};

int x;

do {

cout << "Оберіть категорiю (1 - Пряжа, 2 - Фурнiтура, 3 - Iнструменти): ";

cin >> x;

if (cin) {

if (x == 1 || x == 2 || x == 3) {

strcpy_s(category, 12, cat[x - 1]);

cin.ignore();

break;

}

else {

cout << "Введіть число вiд 1 до 3!" << endl;

}

}

else {

cout << "Введiть число, а не інші символи!" << endl;

cin.clear();

cin.ignore(1000, '\n');

}

} while (true);

}

Здесь в strcpy_s я указал размер буфера равный 12, так как максимальная длина любого элемента в массиве cat - 11 символов (10 символов для текста категории и один символ для нулевого окончания).

Автор ответа: olyanchek
0
void CategoryTovar(char* category) {
const char* cat[] = { "Пряжа", "Фурнiтура", "Iнструменти" };
int x;
do {
cout << "Оберіть категорiю (1 - Пряжа, 2 - Фурнiтура, 3 - Iнструменти): ";
cin >> x;
if (cin) {
if (x >= 1 && x <= 3) {
strcpy_s(category, strlen(cat[x - 1]) + 1, cat[x - 1]);
cin.ignore();
break;
}
else {
cout << "Введіть число вiд 1 до 3!" << endl;
}
}
else {
cout << "Введiть число, а не інші символи!" << endl;
cin.clear();
cin.ignore(1000, '\n');
}
} while (true);
}

Зміни в коді:

1. Додано ключове слово const перед двома масивами char, щоб забезпечити неможливість їх зміни в процесі виконання.
2. Виправлено помилку в умові, що порівнювала x з трьома значеннями. 3. Додано логічний оператор && між умовами.
4. Використано функцію strcpy_s замість strcpy, передавши в неї розмір буфера для копіювання.
Похожие вопросы