#c #char
Вопрос:
Я пытался сделать игру в палача, моя идея заключалась в том, что вы указываете количество букв и слово, а затем программа заполняет символ _
буквами, которые есть в слове. Затем он запрашивает у вас букву и сравнивает, соответствует ли буква какой-либо букве в данном слове. Затем он заменяет соответствующую _
букву буквой, но не заменяет ее…
Что я делаю не так?
#include <iostream>
#include <conio.h>
#include <cstdlib>
using namespace std;
int main()
{
int game = 0;
int n = 0;
char blank[n - 1];
char palabra[n - 1];
char letra;
cout << "Input the number of letters of the wordn";
cin >> n;
cout << "Input the wordn";
cin >> palabra;
for (int i = 0; i < n; i ) {
blank[i] = '_';
}
while (game != 1) {
for (int i = 0; i < n; i ) {
if (letra == palabra[i]) {
blank[i] = letra;
}
else {
if (blank[i] != '_') {
blank[i] = blank[i];
}
else {
blank[i] = '_';
}
}
}
system("cls");
cout << "n";
for (int i = 0; i < n; i ) {
cout << blank[i] << " ";
}
cout << "Input a letter" << endl;
cin >> letra;
}
getch();
return 0;
}
Комментарии:
1. Это объявление массива int n = 0; символ пустой[n -1]; не имеет смысла. Спросите себя, сколько элементов в массиве?
2. используется
std::vector
для массивов динамического размера.3. @Pedro Juan Если ваш компилятор поддерживает массивы переменной длины, а тип size_t имеет тот же размер, что и тип unsigned long long, то это объявление имеет пустой символ[n — 1]; объявляет массив с элементами 18446744073709551615.:)
4. @Педро Хуан Также эта переменная char letra; не была инициализирована. Таким образом, цикл while вызовет неопределенное поведение на своей первой итерации.
5. @Педро Хуан Вам нужно использовать объекты класса std::string вместо массивов переменной длины.
Ответ №1:
int n = 0;
char blank[n - 1];
В этом есть три вещи, которые не так:
- Значение
n
инициализируется равным 0, но тогда массив будет иметь0 - 1
длину. - Значение
n
на самом деле неизвестно до тех пор, пока оно не будет введено пользователем, но вы пошли дальше и объявилиblank
сn-1
помощью записей. - Даже если
n
бы они были инициализированы чем-то разумным, объявление
char blank[n - 1];
не является законным синтаксисом C . Массивы в C должны иметь размер, обозначаемый константой времени компиляции, а не переменной времени выполнения.
Чтобы избавиться от этих проблем, используйте std::string
вместо массивов символов.
Если бы вы это сделали, код выглядел бы примерно так:
#include <string>
#include <iostream>
int main()
{
int game = 0;
int n = 0;
std::string palabra;
char letra;
std::cout << "Input the number of letters of the wordn";
std::cin >> n;
std::cout << "Input the wordn";
std::cin >> palabra;
std::string blank(n, '_'); // create a string with n underscores
//...
}
Остальная часть кода должна остаться прежней. Правильна ли общая логика программы, это было бы другой проблемой, но, по крайней мере, у вас нет проблем с массивами символов.