• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed [C++] Jak naprawić ten kod?

Object Storage Arubacloud
–1 głos
396 wizyt
pytanie zadane 8 sierpnia 2020 w C i C++ przez techno16 Gaduła (4,780 p.)
zamknięte 27 sierpnia 2020 przez techno16

Witam, obecnie tworzę od jakiegoś czasu grę w konsoli (niestety) i muszę stworzyć pewien etap.  

Po prostu przejdę do tematu. Muszę stworzyć coś w rodzaju zamkniętej przestrzeni, która tak ma wyglądać:

|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |

Oczywiście to jest zapętlone. Mój obecny kod wygląda tak:

#include <iostream>
#include <iomanip> 
using namespace std;
char spaces=' ';
char linie='|';
void gra()
{
    while (true) //to się jeszcze zmieni
    {
        cout<<linie;
        spaces+=10;  //nie jestem pewien co do tego
        cout<<spaces;
       cout<<linie<<endl;

    }
}
int main()
{
    gra();

    return 0;
}

Problem w tym, że zamiast oczekiwanego wyniku dostaję zapętlony alfabet, dziwne znaki itd.

||
||
|&|
|0|
|:|
|D|
|N|
|X|
|b|
|l|
|v|
|Ç|
|Ő|
|ö|
|×|
|Ę|
|▓|
|╝|
|Ă|
|đ|
|┌|
|ń|
|ţ|
|°|
||
||
||

Gdzie leży błąd? Co zrobiłem źle?

komentarz zamknięcia: odpowiedź znaleziona

2 odpowiedzi

+1 głos
odpowiedź 10 sierpnia 2020 przez VBService Ekspert (253,340 p.)
wybrane 11 sierpnia 2020 przez techno16
 
Najlepsza

Może tak, coś pomoże: wink

#include <iostream>
#include <iomanip>
 
using namespace std;

char ANSI_GREEN[10]  = "\u001B[32m";
char ANSI_RESET[9]   = "\u001B[0m";

void gra()
{
  for (int i=0; i<10; ++i)
  {
    printf("%s|%s%-20s%s|%s\n", ANSI_GREEN, ANSI_RESET, " ", ANSI_GREEN, ANSI_RESET);
  }
}

int main()
{
  gra();
 
  return 0;
}

komentarz 10 sierpnia 2020 przez techno16 Gaduła (4,780 p.)

To jest świetne :D

Minusem jest to, że nie działa jak powinno na IDE codeblocks (na którym pracuję):

komentarz 11 sierpnia 2020 przez VBService Ekspert (253,340 p.)
edycja 11 sierpnia 2020 przez VBService

Zmień kompilatorwink, albo wyrzuć kolorowanie za pomocą ansi kodów wink

#include <iostream>
#include <iomanip>
 
using namespace std;

void gra()
{
  for (int i=0; i<10; ++i)
  {
    printf("|%-20s|\n", " ");
  }
}

int main()
{
  gra();
 
  return 0;
}

albo spróbuj zmienić "flagi" ustawień kompilatora: wink
Does Codeblocks support ANSI C++?
Why do -ansi and -std=c++11 conflict in g++?
Forcing ANSI C standard only

Może się przyda: 10 Ways to Customize Code::Blocks wink
Console Virtual Terminal Sequences

komentarz 11 sierpnia 2020 przez VBService Ekspert (253,340 p.)

Może tak przejdą ansi? wink (Piszę tak bo nie używam IDE codeblocks)

#include <iostream>
#include <iomanip>
 
using namespace std;

void gra()
{
  for (int i=0; i<10; ++i)
  {
    printf("%c[%dm|%-20s|%c[%dm\n", 0x1B, 32, " ", 0x1B, 0);
  }
}

int main()
{
  gra();
 
  return 0;
}

How to use the ANSI Escape code for outputting colored text on Console

komentarz 11 sierpnia 2020 przez techno16 Gaduła (4,780 p.)

VBService 

ten kod działa 

#include <iostream>
#include <iomanip>
  
using namespace std;
 
void gra()
{
  for (int i=0; i<10; ++i)
  {
    printf("|%-20s|\n", " ");
  }
}
 
int main()
{
  gra();
  
  return 0;
}

Dziękuję za fatygę yes

komentarz 11 sierpnia 2020 przez tkz Nałogowiec (42,000 p.)
#include <iostream> 
#include <iomanip>   

int main () 
{
    for(unsigned i{0}; i < 10; ++i)
    {
        std::cout << '|' << std::setw(20) << '|' << '\n';
    }
}

Skoro piszesz w C++, to korzystaj z jego funkcjonalności. 

0 głosów
odpowiedź 8 sierpnia 2020 przez Michałełe Nałogowiec (25,600 p.)
Do zmiennej linie dodajesz 10, co skutkuje zmianą kodu ascii. Co miałeś na myśli z tym dodawaniem 10 przy każdej iteracji?
komentarz 8 sierpnia 2020 przez techno16 Gaduła (4,780 p.)
Chciałem zrobić tak, żeby program wypisywał | potem robił 10 spacji i znów | następnie przechodził do kolejnej linijki i powtarzał ten proces.

Chyba się nie da tego zrobić bez pomocy tablicy.
komentarz 8 sierpnia 2020 przez Michałełe Nałogowiec (25,600 p.)
Hmm, to zrób jeszcze pętle, która wykona się 10 razy i za każdym razem wypisze spacje
komentarz 8 sierpnia 2020 przez techno16 Gaduła (4,780 p.)

OK, stworzyłem stringa ze spacjami 

string linie="|                                     |";
void gra()
{
    while (true)
    {


       cout<<linie<<endl;
    }
}

Na razie działa, stworzyłem jeszcze 20-znakową tablicę ale tak bardzo bolała w oczy, że musiałem ją zmienić :P

Podobne pytania

0 głosów
0 odpowiedzi 227 wizyt
pytanie zadane 22 września 2017 w C i C++ przez niezalogowany
+1 głos
2 odpowiedzi 374 wizyt
pytanie zadane 10 października 2021 w C i C++ przez <młody_programista> Początkujący (450 p.)
0 głosów
2 odpowiedzi 244 wizyt
pytanie zadane 4 września 2017 w C i C++ przez inlooky Nowicjusz (120 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...