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

question-closed Rysowanie linii wraz z długością wyniku, wyświetlanego tekstu

VPS Starter Arubacloud
0 głosów
399 wizyt
pytanie zadane 10 grudnia 2022 w C i C++ przez piotr_domanski Bywalec (2,140 p.)
zamknięte 11 grudnia 2022 przez piotr_domanski

Witam, mam kod:

#include <iostream>

using namespace std;
int main ()
{
    double a_troj;
    cin >> a_troj;
    cout << "                                 " << a_troj << " * sqrt(3)   " << endl;
    cout << "                           h =  -------------                 " << endl;
    cout << "                                      2                       " << endl;
    
       return 0;
	
}

działanie programu:

Jak widać dla dużych liczb kreska ułamkowa nie rysuje się do końca, jak zrobić żeby ta kreska się rysowała dłuższa wraz z długością wyniku ?

 

komentarz zamknięcia: rozwiazanie

3 odpowiedzi

0 głosów
odpowiedź 11 grudnia 2022 przez mokrowski Mędrzec (156,260 p.)
wybrane 11 grudnia 2022 przez piotr_domanski
 
Najlepsza

Możesz użyć std::ostringstream. Biblioteki strumieni dla C++ warto się nauczyć. W połączeniu z formatowaniem pola ( std::setw(...) ), daje możliwość osiągnięcia tego czego chcesz. Dodatkowo std::string posiada konstruktor powielający znak. W sam raz do kreski ułamkowej:

#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
#include <cstddef>
 
int main()
{
	using namespace std;
    	double a_troj;

	ostringstream os_str;

	cin >> a_troj;

	os_str << ' ' << a_troj << " * sqrt(3) ";

	size_t len = os_str.tellp();
	
	cout << "                 " << os_str.str() << '\n'
         << "             h = " << string(len, '-') << '\n'
         << "                 " << setw(len / 2 + 1) << "2\n";
}

BTW: Do bardziej zaawansowanych formatowań, warto użyć czegoś zręczniejszego. Np. Boost Format.

komentarz 11 grudnia 2022 przez piotr_domanski Bywalec (2,140 p.)
dzięki :)
+1 głos
odpowiedź 10 grudnia 2022 przez Oscar Nałogowiec (29,340 p.)
Wczytać i wypisywać jako string. Wtedy można sprawdzić długość i odpowiednio dopasować długość linii
komentarz 10 grudnia 2022 przez piotr_domanski Bywalec (2,140 p.)
a jak to w kodzie powinno wyglądać, tak w skrócie.
0 głosów
odpowiedź 10 grudnia 2022 przez VBService Ekspert (255,840 p.)
edycja 11 grudnia 2022 przez VBService

W języku C++ można pobrać długość łańcucha tekstowego za pomocą funkcji strlen z biblioteki cstring. Funkcja strlen zwraca liczbę znaków w łańcuchu tekstowym, bez uwzględnienia znaku końca łańcucha (\0). 

#include <iostream>
#include <cstring>
 
int main()
{
    char text[] = "Lorem ipsum";
    int  length = strlen(text);
 
    std::cout << "'Lorem ipsum' ma dlugosc: " << length << " znakow" << std::endl;
 
    return 0;
}

 

Jeśli chcesz powielić jeden znak w języku C++, jednym ze sposobów jest użycie pętli for

#include <iostream>

int main()
{
    char ch = '*';

    for (int i=0; i<10; i++)
        std::cout << ch;

    return 0;
}

lub How can I repeat a string a variable number of times in C++?

Podobne pytania

0 głosów
0 odpowiedzi 435 wizyt
0 głosów
1 odpowiedź 227 wizyt
pytanie zadane 21 sierpnia 2018 w JavaScript przez mi-20 Stary wyjadacz (13,250 p.)
0 głosów
0 odpowiedzi 261 wizyt

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...