• 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.

0 głosów
272 wizyt
pytanie zadane 10 kwietnia 2018 w C i C++ przez Hiskiel Pasjonat (22,520 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 (27,820 p.)
Co do książki to raczej Cormena "Wprowadzenie do algorytmów"
komentarz 10 kwietnia 2018 przez Hiskiel Pasjonat (22,520 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 (38,050 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,520 p.)
komentarz 11 kwietnia 2018 przez Knayder Nałogowiec (38,050 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,520 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 (38,050 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,520 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 (154,240 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,520 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ź 105 wizyt
0 głosów
3 odpowiedzi 107 wizyt
pytanie zadane 27 stycznia 2018 w PHP, Symfony, Zend przez hiper007 Stary wyjadacz (10,670 p.)
0 głosów
0 odpowiedzi 412 wizyt
pytanie zadane 4 października 2016 w C i C++ przez Sidzej Użytkownik (870 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

62,438 zapytań

108,589 odpowiedzi

226,699 komentarzy

36,001 pasjonatów

Przeglądających: 71
Pasjonatów: 10 Gości: 61

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...