【发布时间】:2021-06-08 18:35:32
【问题描述】:
我试图做一个刽子手游戏,我的想法是你给出字母的数量和单词,然后程序用 _ 填充一个字符作为单词的字母。然后它会询问您一个字母,并比较该字母是否与给定单词中的任何字母匹配。然后它用字母替换相应的_,但它不会替换它......
我做错了什么?
#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 word\n";
cin >> n;
cout << "Input the word\n";
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;
}
【问题讨论】:
-
这个数组声明 int n = 0;字符空白[n -1];没有意义。问问自己这个数组有多少个元素?
-
对动态大小的数组使用
std::vector。 -
@Pedro Juan 如果您的编译器支持可变长度数组并且 size_t 类型与 unsigned long long 类型具有相同的大小,则此声明 char blank[n - 1];声明一个包含 18446744073709551615 个元素的数组。:)
-
@Pedro Juan 还有这个变量 char letra;未初始化。因此,while 循环将在其第一次迭代中调用未定义的行为。
-
@Pedro Juan 您需要使用 std::string 类的对象而不是可变长度数组。