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

[C++] znaki specjalne, wyświetlanie tak jak z poziomu kodu.

VPS Starter Arubacloud
0 głosów
2,649 wizyt
pytanie zadane 10 kwietnia 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
edycja 10 kwietnia 2018 przez Hiskiel
Od razu dla tych, którzy uczepią się szukania w google - nie wiedziałem jak sformułować fraze.

-------------------------------------------

Witam.

 

Mam taki problem. Piszę sobie narzędzie konsolowe, które ma mieć tam parę opcji, między innymi wyświetlanie jakiegoś tekstu X razy, z wzorami itd.

I tu chodzi o ten tekst. Z poziomu kodu mogę napisać \t, \n itd. I wtedy znaki te będą interpretowane jako znak nowej linii, tabulacja, ...

Jednakże jeśli zrobię to samo z poziomu konsoli, jako argument, to nie będzie to już tak samo wypisane. Myślałem o tym, żeby wypisywać tekst znak po znaku i jeśli trafi się na \ to sprawdzać jaki jest kolejny znak i na podstawie tego odpowiednie znaki wyświetlać, jednakże nie wiem czy nie byłoby to wolne. Algorytmika nie jest moją mocną stroną (wiem, wiem, to prawie najważniejsza rzecz. Mam zamiar sobie za niedługo kupić książkę "Algorytmy + Struktury danych = programy").

 

Pozdrawiam.
komentarz 10 kwietnia 2018 przez Secrus Nałogowiec (32,880 p.)
Co do książki to raczej Cormena "Wprowadzenie do algorytmów"
komentarz 10 kwietnia 2018 przez Hiskiel Pasjonat (22,830 p.)
Dlaczego tak? Słyszałem, że to o czym wspomniałem to bardziej taki must have.
komentarz 10 kwietnia 2018 przez niezalogowany

Dla mnie must have jeśli chodzi o algorytmy to: Algorytmy i już wspomniane Wprowadzenie do algorytmów

2 odpowiedzi

+1 głos
odpowiedź 10 kwietnia 2018 przez Knayder Nałogowiec (37,640 p.)
http://coliru.stacked-crooked.com/a/b5b55822aca354e3
Tam niżej masz efekt kompilacji. W drugiej linijce masz to co trafi to stringa za pomocą std::cin
komentarz 11 kwietnia 2018 przez Hiskiel Pasjonat (22,830 p.)
komentarz 11 kwietnia 2018 przez Knayder Nałogowiec (37,640 p.)
No to nie wiem :/ Może 6.3.0 nie ma pełnego wsparcia dla każdej zmiany z c++17. Ja używam 7.2.0 :v
komentarz 12 kwietnia 2018 przez Hiskiel Pasjonat (22,830 p.)

Witaj. Mam kolejny problem. Tutaj jest mój kod:

#include <iostream>
#include <stdlib.h>
#include <windows.h>
#define UN unsigned

using namespace std;

const short ERR = 12, GOOD = 10;

void color(int color){
	HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(h, color);
}

char SChar(const char ch){
	switch(ch){
		case 'n': return '\n';
		case 't': return '\t';
		case 'r': return '\r';
		case 'v': return '\v';
		case 'f': return '\f';
		case '"': return '\"';
		case '\\':return '\\';
	}
}

int main(int argc, char* argv[]){
	if(argc==3){
		const char* UInput = argv[1];
		int DisplayCount;

		if(strlen(UInput)==0){
			color(ERR);
			cout<<"\tFirst argument is empty!"<<endl;
			exit(1546);
		}

		string UserInput = UInput; 

		if(!(DisplayCount=atoi(argv[2]))){
			color(ERR);
			cout<<"\tInvalid second argument \""<<argv[2]<<"\"."<<endl;
			exit(12);
		}
		
	
		for(auto i = UserInput.begin(); i != UserInput.end(); ++i){
			if(*i == '\\'){
				auto i2 = i+1;
				if(i2 != UserInput.end()){
					*i=SChar(*i2);
					UserInput.erase(i2);
				}
			}	
		}
		
		for(UN int i=0;i<DisplayCount; ++i)
			cout<<UserInput<<endl;
	}
}

I nawet gdy na inpucie będzie "nazwaprogramu litera 10". Powinno wypisać

literaliteraliteraliteraliteraliteraliteraliteraliteralitera

A wypisuje

litera
litera
litera
litera
litera
litera
litera
litera
litera
litera

Co jest błedne.

Nie rozumiem gdzie tu jest problem. Na końcu stringa nie ma \n. 

komentarz 12 kwietnia 2018 przez Knayder Nałogowiec (37,640 p.)

Nie rozumiem trochę jak działa twój program, ale daj może bez tego endl; na końcu:
 

for(UN int i=0;i<DisplayCount; ++i)
    cout<<UserInput<<endl;

 

komentarz 12 kwietnia 2018 przez Hiskiel Pasjonat (22,830 p.)
A, przepraszam. To się wiązało z mechaniką innego programu. Dzięki za pomoc.
0 głosów
odpowiedź 10 kwietnia 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Jeżeli dobrze Cię rozumiem, to prawdopodobnie poszukujesz tego:

std::cout << R"(Hejka \t \n \b\a \\ :D)";

W nawiasach wstawiasz co tam Ci się żywnie podoba.

@EDIT

Chyba, że wiem o co Ci jeszcze może chodzić. Masz na myśli to, że w pliku posiadasz tego typu znaki specjalne typu \n, \t i chcesz je wyświetlać jako znaki powiedzmy nowej linii, czy tabulacji? - jeżeli tak, to wystarczy w pliku bezpośrednio wpisać właśnie np. tabulator, czy enter i wszystko powinno się wyświetlać poprawnie.

komentarz 10 kwietnia 2018 przez Hiskiel Pasjonat (22,830 p.)

Ale, to ma być zmienna.

Coś w tym stylu:

#include <iostream>
#include <stdlib.h>

int main(int argc, char* argv[]){
    //Tutaj kilka ifów
    const char* arg1 = argv[1];
    int arg2;
    //Sprawdzanie czy arg1 się zgadza
   
    if(!(arg2 = atoi(argv[2]))){
        //...
    }
   
    for(unsigned int i=0;i<arg2;++i){
        cout<<arg1;   
    }
}

/* Gdy na wejściu będzie np. abc i 2
dostaniemy
abcabc

A gdy będzie abc\n 2
dostaniemy
abc\nabc\n

Chodzi o to, żeby te znaki specjalne były odczytywane.  
Żeby były interpretowane tak jak z poziomu kodu, czyli
abc
abc


 

Podobne pytania

0 głosów
1 odpowiedź 429 wizyt
pytanie zadane 21 stycznia 2022 w C i C++ przez Ruthenium Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 319 wizyt
pytanie zadane 15 czerwca 2020 w C i C++ przez Michał Wierzbiński Użytkownik (630 p.)
0 głosów
2 odpowiedzi 414 wizyt
pytanie zadane 31 października 2019 w Offtop przez Iam Nowicjusz (150 p.)

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...