Portál AbcLinuxu, 8. května 2025 04:13

Dotaz: CRLF do konsole a v jazyce C

12.1.2011 07:38 roman
CRLF do konsole a v jazyce C
Přečteno: 544×
Odpovědět | Admin

Dobry den,

mam takovou laickou otacku ve starem DOSu jsem pouzival pro vlozeni znaku z ascii tabulky kombinaci Alt + kod_znaku,  napr. Alt + 13, Alt + 10, Alt + 92, coz bohuzel na linux konzoli nefunguje (pouzivam KDE4, konzoli prikazem konsole), existuje nejake alternativa jak toto udelat? (potreboval bych v prubehu zadavani pridat do zadavaneho retezce CRLF).

A druha otazka souvisejici, v jazyce C nactu vstup z klavesnice (scanf) do string promene a ted bych rad na konec teto promena pridal opet sekvenci CRLF, lze to udelat pomoci spojovani retezci tedy fce strcat, jak zadam znaky crlf? Pomoci \?

Omlouvam se za hloupy dotaz. Roman

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.1.2011 08:45 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: CRLF do konsole a v jazyce C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zadávat znaky jsem nikdy přes alt+ něco nemusel takže neporadím - tisknutelné znaky najdeš všechny na klávesnici některé pomocí kombinace AltGr + znak -> AltGr + e = € a pod....

Jinak zadání CRLF normálně v C = "\r" a "\n"

Já jsem na linuxu pokud program měl výstup dat pro msdos používal tohle:
fprintf(fw,"BEGIN:VCALENDAR\r\n");
fprintf(fw,"VERSION:2.0\r\n");
fprintf(fw, "BEGIN:VEVENT\r\n");
fprintf(fw, "SUMMARY:%s\r\n", UTF8toWindows( (char *) linka));

UTF8toWindows( (char *) linka) převádí kodování.
/* převod kodování */

char * UTF8toWindows (char * from)
{
    char *p1, *p2;
    iconv_t i;
    size_t fromlen, tolen;
    size_t iconv_value;

    errno=0;
	
    if (strlen(from) > DELKA_POZNAMKY) {
	perror("ICONV: Poznámka je moc dlouhá.");
        exit(errno);
    }


    memset(convStr,0,sizeof(convStr));
    tolen = fromlen = strlen(from);
    p1 = (char *)from;
    p2 = (char *)convStr;

    i = iconv_open("WINDOWS-1250", "UTF-8");
    if (i == (iconv_t) -1) {
        if (errno == EINVAL)
	  perror("ICONV: Nepodporuji převod z UTF-8 do CP1250.");
	else
	  perror("ICONV: Chyba převodu kodování.");
          exit(errno);

    }



    /* Převod */
    /* iconv_value = iconv(i, (const char **)&p1, &fromlen, &p2, &tolen); */
    iconv_value = iconv(i, &p1, &fromlen, &p2, &tolen);
    if (iconv_value == (size_t) -1) {
        perror ("ICONV: Převod kodování se nepovedl.");
	exit(errno);
    }
    iconv_close(i);
    return(convStr);
}



12.1.2011 10:01 mato
Rozbalit Rozbalit vše Re: CRLF do konsole a v jazyce C
Odpovědět | | Sbalit | Link | Blokovat | Admin
pamatam si, ze pod DOSom to bolo hlavne oblubene kvoli kresleniu okien :)
mozes ich escapnut pomocou \x<HEX_NR>, tj tvoje CRLF by bolo \xa\xd, napriklad "Helo\n\r" vies zapisat ako

fprintf (stdout, "Helo\xa\xd");  
/* ale aj ako: */
fprintf (stdout, "\x48\x65\x6c\x6f");
vkladat znak mozes sposobom:

char test[10] = "helo"; 
test[4] = '\xa';
test[5] = '\xd'; 
/* alebo aj /*
test[4] = '\n';
test[5] = '\r';
12.1.2011 16:00 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: CRLF do konsole a v jazyce C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vkladat nektere kontrolni znaky jde pres Ctrl-V + control character (nebo jek se to jmenuje). CR lze vlozit pomoci Ctrl-V + Ctrl-M an LF pomoci Ctrl-V + Ctrl-J. Funguje i kdyz se drzi Ctrl, takze celou sekvenci lze rychle napsat: stisknout CTRL -> V -> M -> V -> J -> poustit Ctrl.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.