c ++: колода не показывает первую карту

Я на самом деле пытаюсь создать блеф карточную игру на с ++. Когда я вызываю функцию showAllCards, карта у колоды (Ace of Hearts) не отображается на выходе, единственный способ показать это — добавить обе структуры колоды в основной корпус. И когда программа запускается (без верхней карты), dev также генерирует некоторые предупреждения. Что я делаю неправильно?
Также можете ли вы сослаться на некоторые улучшения / изменения в программе.
Вот код:

#include <iostream>
#include<Strings.h>
#include<cstdlib>

using namespace std;

struct link{
int data;
link *link;
};

struct deck
{
string suit[32];
string value[32];
}card;

struct cardsDeck{
string nxt[20];
string suitlist[4] = {"hearts","spades","clubs","diamonds"};
string vals[8] = {"ace","two","three","four","five","jack","queen","king"};

}cdeck;

class Game
{
private:
link *first;
public:
Game();
void check();
void mask();
void pass();
void enterCard();
void showAllCards();
void shuffle();
void rearrangeCards();
};

Game::Game(){
first=NULL;
}

void Game::rearrangeCards(){
short int x = 0, y = 0, z = 0;
while(x < 32)
{
card.suit[x] = cdeck.suitlist[y];
card.value[x] = cdeck.vals[z];
++x;
++z;
if(x % 8 == 0)
{
++y;
}
if(z % 8 == 0)
{
z = 0;
}
}

}

void Game::showAllCards(){
int x;
while(x < 32)
{

if(card.suit[x]!=card.suit[x-1]){
cout<<"\n";
}
cout << card.value[x] << " of " << card.suit[x] << "\n";
++x;
}
}

int main(){
Game game;
int op;
game.rearrangeCards();
cout<<"Welcome to Bluff Mashter 20/12/15::6:46\nEnter the Operation please:\n\n";
cin>>op;
while(op!=0){
switch(op){
case 1:
game.showAllCards();
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;

}
}

return 1;
}

и вот предупреждения

20  63  E:\Projjects\mainbluuf.cpp  [Warning] non-static data member initializers only available with -std=c++11 or -std=gnu++11
21  78  E:\Projjects\mainbluuf.cpp  [Warning] non-static data member initializers only available with -std=c++11 or -std=gnu++11
20  63  E:\Projjects\mainbluuf.cpp  [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11
21  78  E:\Projjects\mainbluuf.cpp  [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11

-3

Решение

при условии, что ваш метод таков:

void Game::showAllCards(){
int x = 0;
while(x < 32)
{

if(card.suit[x]!=card.suit[x-1]){
cout<<"\n";
}
cout << card.value[x] << " of " << card.suit[x] << "\n";
++x;
}
}

в вашей первой итерации вы делаете это: card.suit[0]!=card.suit[-1] что неправильно.

void Game::showAllCards(){
int x = 1;
while(x < 32)
{

if(card.suit[x]!=card.suit[x-1]){
cout<<"\n";
}
cout << card.value[x] << " of " << card.suit[x] << "\n";
++x;
}
}

Я не проверял код, хотя, но я думаю, что это решает проблему.

Примечание: я установил x в 1 это единственное изменение. Так как вы новичок в C ++ по умолчанию uninitialized переменные могут содержать любые непредсказуемые значения, которые хранятся в этом адресе памяти, поэтому рекомендуется всегда инициализируйте ваши переменные.

Обновить:

Попробуй это:

void Game::showAllCards(){
for(x = 0; x < 32; ++x)
{
cout << card.value[x] << " of " << card.suit[x] << "\n";
}
}

Обновление 2:

int main(){
Game game;
int op;
game.rearrangeCards();
cout<<"Welcome to Bluff Mashter 20/12/15::6:46\nEnter the Operation please:\n\n";

cin >> op;
while(op!=0){
switch(op){
case 1:
game.showAllCards();
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;

}

cin >> op;
}

return 0;
}

Обновление 3:

void Game::showAllCards(){
string lastSuit = "";

for(x = 0; x < 32; ++x)
{
if(lastSuit != card.suit[x])
cout << "\n";

cout << card.value[x] << " of " << card.suit[x] << "\n";
lastSuit = card.suit[x];
}
}
1

Другие решения

После некоторых логических пыток и советов от Бойнукса я разобрался в обеих проблемах.

for(int j=0;j<32;j++){
cout<<card.value[j] << " of " << card.suit[j]<<"\n";
if(j==7 || j==15 || j==23 || j==31)
{
cout<<"\n";
}
}
0

По вопросам рекламы [email protected]