• 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
406 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 (254,630 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 (254,630 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 (254,630 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 381 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 246 wizyt
pytanie zadane 4 września 2017 w C i C++ przez inlooky Nowicjusz (120 p.)

92,702 zapytań

141,615 odpowiedzi

320,180 komentarzy

62,060 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

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!

...