z znakami specjalnymi

0

Witam,
Mam małe proste pytanie, mianowicie w jaki sposób mogę wyświetlić napis w consoli bez znaków specjalnych?
np. mam coś takiego:

cout<<"\nic\tam\"<<endl; 

chciałbym by został wyświetlony dokładnie napis "\nic\tam", lecz bez żadnych modyfikacji tekstu

0
cout<<"\\nic\\tam\\"<<endl; 
0

To wiem, lecz jak już pisałem wcześniej potrzebuje innej funkcji niż cout która umożliwi mi pożądany efekt bez modyfikacji tekstu

0

Zawsze możesz napisać funkcję printf-o podobną zamieniającą \n na \\n, a \t na \\t i wyświetlającą to.

0
Patryk27 napisał(a):

Zawsze możesz napisać funkcję printf-o podobną zamieniającą \n na \\n, a \t na \\t i wyświetlającą to.
Nie. Nie rób tego.

1

Bez modyfikacji tekstu coś takiego w ogóle się nie skompiluje

cout<<"\nic\tam\"<<endl; 
0

To nie cout ani printf działają w taki sposób tylko kompilator C++ tak traktuje literały tekstowe. Co tak w zasadzie chcesz osiągnąć? Będziesz wklejał wielkie pliki tekstowe i traktował je kompilatorem? Bo jeżeli będziesz te pliki tekstowe otwierał podczas działania programu to jak najbardziej tekst może być w takiej formie.

0
eandy napisał(a):

To wiem, lecz jak już pisałem wcześniej potrzebuje innej funkcji niż cout która umożliwi mi pożądany efekt bez modyfikacji tekstu

NIE DA SIĘ.

1
eandy napisał(a):

Witam,
Mam małe proste pytanie, mianowicie w jaki sposób mogę wyświetlić napis w consoli bez znaków specjalnych?
np. mam coś takiego:

cout<<"\nic\tam\"<<endl; 

chciałbym by został wyświetlony dokładnie napis "\nic\tam", lecz bez żadnych modyfikacji tekstu

Ustalmy pewne fakty:

cout<<"\nic\tam\"<<endl; 

Cout wypisuje dokładnie to, co mu wysłałeś. Nie zmienia znaków w żaden sposób.

Może jakiś mały przykład:

#include <iostream>

using namespace std;

int main()
{
    string a = "\nic";
    string b = "\\nic";

    cout << a.size() << endl;
    cout << b.size() << endl;
}

Po uruchomieniu:

3
4

Wniosek: napis "\nic" to napis składający się z trzech znaków - \n, i, c.
Napis "\nic" to napis składający się z czterech znaków - , n, i, c.

Czyli znaki typu '\n', '\t', etc są zamieniane na etapie kompilacji, a zamiast nich pojawiają się inne znaki, których nie można wstawić z powodów składniowych Nie możesz napisać na przykład string a = "
nic";, więc musisz dać \n zamiast entera.

Co z tego jeszcze wynika - że jeśli na przykład stworzysz plik w notatniku i napiszesz w nim "\nic", wczytasz ten plik do programu i wypiszesz, na konsoli pojawi się dokładnie zawartość tego pliku, czyli "\nic".

Albo:

#include <iostream>

using namespace std;

int main()
{
    string a = "    ";
    a[0] = '\\';
    a[1] = 'n';
    a[2] = 'i';
    a[3] = 'c';

    cout << a << endl;
}

Wypisze, dosłownie, "\nic".

Ok, nie mam pomysłu jak to jeszcze wytłumaczyć, mam nadzieję że zrozumiałeś co chcesz zrobić i dlaczego to zły pomysł...

0

Czyli w skrócie - powinieneś zadbać o prawidłowy napis zanim zostanie on skompilowany zamiast "naprawiać" to podczas działania programu.

0
char t[] = {92, 110, 105, 99, 92, 116, 97, 109, 92, 0};
printf(t);

to zadziała tak jak sobie życzy autor

1 użytkowników online, w tym zalogowanych: 0, gości: 1