Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di alengy
    Registrato dal
    Oct 2005
    Messaggi
    31

    [C] parametri di Printf

    Ciao a tutti!! premettendo che sn neofita di programmazione, sto iniziando ad imparare dal linguaggio C per farmi un po' le ossa..

    Chiedo a tutti voi .. come si fa a passare alla funzione printf caratteri accentati da stampare a video?

    Non ne vengo fuori neanche con Mr Google..

    Grazie in anticipo!!

  2. #2

    Re: [C] parametri di Printf

    Originariamente inviato da alengy
    Ciao a tutti!! premettendo che sn neofita di programmazione, sto iniziando ad imparare dal linguaggio C per farmi un po' le ossa..

    Chiedo a tutti voi .. come si fa a passare alla funzione printf caratteri accentati da stampare a video?

    Non ne vengo fuori neanche con Mr Google..

    Grazie in anticipo!!
    Non è molto comodo, ma potresti passare il codice ASCII.
    Ad esempio :
    codice:
    printf("-come v%c\n-cos%c cos%c, per%c... perch%c ?", 133, 141, 141, 149, 138);
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Puoi anche usare gli apici...
    codice:
    printf("E' proprio una bella giornata");
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Così è un pò più pratico
    codice:
    #define a 133 // à
    #define e 138 // è
    #define i 141 // ì
    #define o 149 // ò
    #define u 151 // ù
    
    void main()
    {
    	printf("-come v%c\n-cos%c cos%c, per%c... perch%c in per%c?", a, i, i, o, e, u);
    ...
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    comunque personalmente non mi capacito del fatto che non sia possibile farlo in altro modo più semplice... è tanto che ci sbatto la testa ma oramai mi sono rassegnato.
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  6. #6
    Il C standard non supporta i caratteri accentati, per stampare a video caratteri accentati la cosa più semplice è usare gli apici, ad esempio à la scrivi a' (come già ti era stato siggerito).
    Ciao.
    Stefano Viscione,
    miosito.ilbello.com
    www.lucemsoft.it/

  7. #7
    Originariamente inviato da Habanero
    comunque personalmente non mi capacito del fatto che non sia possibile farlo in altro modo più semplice... è tanto che ci sbatto la testa ma oramai mi sono rassegnato.
    Infatti... Per me una soluzione ci potrebbe essere,
    anzi credo proprio che ci sia
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Un attimo, cerchiamo di fare un po' d'ordine ...

    Windows usa un set di caratteri che potete vedere in

    http://www.microsoft.com/globaldev/r...sbcs/1252.mspx

    che e' diverso da quello del DOS (ad esempio, la à ha codice 85 esadecimale per il set del DOS mentre ha codice E0 nel set di Windows).

    Quando si scrive la à con un qualsiasi editor in Windows, viene inserito il carattere esadecimale E0 (in conformita' al set di Windows). A questo punto pero' questo carattere deve essere usato con Windows che rispetterà il proprio set. E' per tale ragione che un codice del genere

    char s[] = "àèéìòù";
    MessageBox(NULL, s, "Esempio", 0);

    non mostra problemi nella visualizzazione dei caratteri.

    Ovviamente, se la stringa viene passata al DOS (nel caso di una applicazione di tipo console ...) essa viene interpretata dal DOS secondo il set di caratteri proprio del DOS. Quest'ultimo visualizza il carattere corrispondente nel proprio set a quello che ha codice E0 (e naturalmente, per il DOS, questo non è la à ...).

    Per fare in modo che il carattere sia quello corretto, bisogna introdurlo da un editor in DOS (ad esempio il vecchio EDIT) in modo da inserire il corretto codice ... Aprendo il sorgente con l'EDIT, si può scrivere

    char s[] = "àèéìòù";
    printf(s);

    dato che, ovviamente, la MessageBox non avrebbe senso in DOS ...
    E tutto sarebbe corretto.

  9. #9
    Originariamente inviato da oregon
    Un attimo, cerchiamo di fare un po' d'ordine ...

    Windows usa un set di caratteri che potete vedere in

    http://www.microsoft.com/globaldev/r...sbcs/1252.mspx

    che e' diverso da quello del DOS (ad esempio, la à ha codice 85 esadecimale per il set del DOS mentre ha codice E0 nel set di Windows).

    Quando si scrive la à con un qualsiasi editor in Windows, viene inserito il carattere esadecimale E0 (in conformita' al set di Windows). A questo punto pero' questo carattere deve essere usato con Windows che rispetterà il proprio set.
    [...]
    Infatti la 'soluzione' che avevo in mente, ed è quella che riporto di seguito,
    è semplicemente una funzione che effettua la conversione
    di alcuni caratteri dalla codifica Windows a quella DOS.
    Da usare al posto della printf().
    codice:
    #include <iostream>
    #include <stdio.h>
    
    // Caratteri supportati : "àÀáÁèÈéÉìÌíÍòÒóÓùÙúÚçÇ°§«»®©µ"
    void prints( char *str )
    {
    	int ch, indice=0;
    	unsigned char *strOut;
    	strOut = (unsigned char*)malloc( sizeof(char) *strlen( str ));
    	while( *str )
    	{
    		ch = *str++;
    		switch( ch )
    		{
    			case -32: /* à */ ch=133; break;
    			case -64: /* À */ ch=183; break;
    			case -31: /* á */ ch=160; break;
    			case -63: /* Á */ ch=181; break;
    			case -24: /* è */ ch=138; break;
    			case -56: /* È */ ch=212; break;
    			case -23: /* é */ ch=130; break;
    			case -55: /* É */ ch=144; break;
    			case -20: /* ì */ ch=141; break;
    			case -52: /* Ì */ ch=222; break;
    			case -19: /* í */ ch=161; break;
    			case -51: /* Í */ ch=214; break;
    			case -14: /* ò */ ch=149; break;
    			case -46: /* Ò */ ch=227; break;
    			case -13: /* ó */ ch=162; break;
    			case -45: /* Ó */ ch=224; break;
    			case - 7: /* ù */ ch=151; break;
    			case -39: /* Ù */ ch=235; break;
    			case - 6: /* ú */ ch=163; break;
    			case -38: /* Ú */ ch=233; break;
    			case -25: /* ç */ ch=135; break;
    			case -57: /* Ç */ ch=128; break;
    			case -80: /* ° */ ch=248; break;
    			case -89: /* § */ ch=245; break;
    			case -85: /* « */ ch=174; break;
    			case -69: /* » */ ch=175; break;
    			case -82: /* ® */ ch=169; break;
    			case -87: /* © */ ch=184; break;
    			case -75: /* µ */ ch=230; break;
    		} 
    		strOut[indice++] = ch;
    	}
    	strOut[indice+1]='/0';
    	printf("%s", strOut);
    }
    
    int main()
    {
    	char *str="àÀáÁèÈéÉìÌíÍòÒóÓùÙúÚçÇ°§«»®©µ\n";
    	prints( str );
    	prints( "àÀáÁèÈéÉìÌíÍòÒóÓùÙúÚçÇ°§«»®©µ\n");
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.