我會直接
背景:我正在制作一個劊子手游戲
腳本“錯誤”區域:
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--;
}
}
問題:
我將模擬發生的情況:
讓我們把秘密詞當作“熊”,好嗎?
第一個回圈 =
單詞: - - 壽命:5 cin >> 'b'
第二個回圈 =
詞:b--- 壽命:5 cin >> 'a'
第三個回圈 =
詞:-a- 壽命:5 cin >> 'b'
第四個回圈 =
詞:ba- 壽命: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] != '\0'){
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;
}
uj5u.com熱心網友回復:
好的,鑒于您正在努力學習,并且您不受任何典型家庭作業規則的限制,您可以按照這些第一步正確地做事。
首先:char[]用std::strings 替換那些。在 c 中,您已經構建了用于執行各種操作的類,管理字串就是其中之一,并且std::string是要走的路。
second:
letter從字面上看是一個字母,所以 is 不需要是 a char[1],它可以只是 a char。
第三:盡量用英文寫變數,共享代碼時對任何人來說都更容易。
從這些簡單的步驟開始,您將撰寫更好的代碼,順便幫助您避免錯誤。
Ps 我不會放你的代碼的作業和改進版本,因為我認為你會自己學習更多,而不是僅僅從這里復制一些代碼。
uj5u.com熱心網友回復:
char chave[50], palavra[50], letra[1];
定義letra為 1 個字符的陣列。這是一個問題,因為當cin >> letra;讀入時letra,它讀取為以空字符結尾的字串,而不是單個字符。不幸的是,一個字符和一個空終止符在 1 個字符陣列中沒有空間,因此letra[0]保留字符,不存在letra[1]的保留空終止符。這是一個越界寫入,并呼叫所謂的未定義行為。從技術上講,任何事情都可能發生。
似乎正在發生的事情letra[1]恰好與 記憶體中的位置相同palavra[0],因此'b'被空字符覆寫。
解決方案:
char chave[50], palavra[50], letra;
然后
if(chave[i] == letra){
palavra[i] = letra;
acerto=true;
}
讓字符為單個字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/455294.html
上一篇:C程式求階乘之和
