为什么只有索引 0 将他的值更改为 " "



我将直接成为

上下文:我正在制作一个刽子手游戏

脚本"bug";区域:

while(lifes > 0){
cout << "word: ";
for(int i=0; i<size; i++){
cout << secret[i];
}
cout << endl;
cout << "lifes: " << lifes << endl;
cout << endl << "choose a letter..." << endl;
cin >> letter;
check=false;
for(int i=0; i<size; i++){
if(key[i] == letter[0]){
secret[i] = letter[0];
check=true;
} 
}
if(check == false){
lifes--;
}
}

问题:

我将模拟发生的情况:

让我们把这个秘密单词取为";熊";,好啊

第一个循环=

单词:----寿命:5cin>>'b'

第二个循环=

单词:b---寿命:5cin>>"a">

第三个循环=

单词:-a-寿命:5cin>>'b'

第四个循环=

单词:b-a-寿命:5

参见????当我输入一个新字母时,第一个字母会变成空白,但如果我再次输入该字母,它就会出现!!

我真的不知道怎么解决这个问题。

谢谢你的帮助,为你糟糕的英语感到抱歉哈哈。

如果你想要完整的代码:

#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
//definição de variáveis

char chave[50], palavra[50], letra[1];
int tam=0, pos=0, vidas=5;
bool acerto=false;

//estabelecendo palavra-chave
cout << "Qual a palavra?" << endl;
cin >> chave;

system("cls");

//descobrindo o tamanho da palavra-chave
while(chave[pos] != ''){
tam++;
pos++;
}

//escondendo a palavra secreta
for(int i=0; i<tam; i++){
palavra[i] = '-';
}

/*
.
. etapa 1
.
*/

while(vidas > 0){

//criar painel
cout << "Palavra: ";
for(int i=0; i<tam; i++){
cout << palavra[i];
}
cout << endl;
cout << "Vidas: " << vidas << endl;

cout << endl << "Escolha uma letra..." << endl;
cin >> letra;

//verificar se tem algum caracter identico à letra
acerto=false;
for(int i=0; i<tam; i++){

if(chave[i] == letra[0]){
palavra[i] = letra[0];
acerto=true;
} 
}

if(acerto == false){
vidas--;
}

//fim do loop
system("pause");
system("cls");
}



return 0;
}
char chave[50], palavra[50], letra[1];

将CCD_ 1定义为一个包含1个字符的数组。这是一个问题,因为当cin >> letra;读取letra时,它读取的是以null结尾的字符串,而不是单个字符。不幸的是,在一个1个字符的数组中没有一个字符和一个null终止符的空间,因此letra[0]保存该字符,而不存在的letra[1]保存null终止符。这是一个写越界,调用了所谓的未定义行为。从技术上讲,任何事情都可能发生。

似乎正在发生的是,letra[1]恰好与palavra[0]在内存中的位置相同,因此'b'被一个空字符覆盖。

解决方案:

char chave[50], palavra[50], letra;

以及后来的

if(chave[i] == letra){
palavra[i] = letra;
acerto=true;
}

让角色成为单个角色。

好吧,考虑到你正在努力学习,而且你不受任何典型家庭作业规则的限制,你可以按照以下第一步正确做事。

首先:将这些CCD_ 9替换为CCD_ 10s。在c++中,您已经构建了可以做各种事情的类,管理字符串就是其中之一,letra1就是其中之一。

第二:letter实际上是一个单独的字母,所以它不需要是char[1],也可以只是char

第三:试着用英语写变量,当你要共享代码时,对任何人来说都更容易。

从这些简单的步骤开始,您将编写更好的代码,这些代码将顺便帮助您避免错误。

附言:我不会把你的代码放在一个有效的和改进的版本里,因为我认为你自己做会学到更多,而不是从这里复制一些代码。

相关内容

  • 没有找到相关文章

最新更新