[C] Lettere accentate nell'istruzione printf()

di Anonimizzato6905 il
13 risposte
Ciao a tutti,

sono nuovo nel Forum
mi chiamo Robertino,

ho ripreso a studiare il C dopo alcuni anni,

spero di oltre che chiedere anche di rispondere alla domande e di
aiutare nel forum.

Non riesco a capire come inserire le lettere accentate (es. è à ò) dentro un'istruzione
printf(); se le scrivo nel codice poi quando eseguo il programma mi visualizza un'altro
carattere, come compilatore utilizzo Pelles C.

Ciao a tutti e grazie per la risposta.
Robertino.

13 Risposte

  • Non si puo.. metti ' per le lettere accentate..
  • Se usi una versione inferiore alla 5.00.1 non viene supportato il locale nel modulo runtime.
    L'upgrade infatti aggiunge il supporto per UTF-8 e UTF-16 e il settaggio del locale.

    Il fatto di non usare le accentate è una cavolata... se dovessi scrivere una printf in giapponese o indiano?!? Il locale serve alla stesura di programmi multilingua!!!
  • Uso la versione 6.00.4 di Pelles C, quindi dovrebbe funzionare?
  • Sembrerebbe di si, ma io non conosco l'ambiente e l'informazione te l'ho passata per quello che ho letto dalle loro news di upgrade.

    Le tue variabili di ambiente LC sono settate correttamente?
    Quale codifica di caratteri utilizzi nella shell?

    Cerca nel loro Forum 'locale'
  • Ciao, molto probabilmente non riesci a vedere la lettera accentata perché il compilatore crea l'eseguibile codificando in latin1 e il tuo terminale di output codifica in unicode (o viceversa). In questo caso dovresti provare la libreria wchar del c per gestire caratteri in latin1. Prova a fare una printf("%S\n", "è"); e dovresti visualizzare correttamente la lettera.

    Intel
  • Se il compilatore non le supporta non le puoi scrivere. che io sappia e secondo la mia piccola esperienza il C non supporta parole accentate, infatti per scrivere "è" dovresti scrivere "e' ", a diff del c++ che è stato implementato in maniera "migliore"
  • @cianuro,

    Partendo dal presupposto che la codifica unicode UTF-8 e UTF-16 viene gestita dal compilatore dalla versione 5.00.1
    - come dichiarato nelle loro news di upgrade- il problema è quindi di incompatibilità tra la codifica di output dell'eseguibile e la codifica di visualizzazione del terminale -come aveva evidenziato @Intel-. Tutto qui! Le lettere accentate si usano e sono gestibilissime!!!
    Io ho progetti multilingua -scritti in C- in giro per il mondo tradotti in Francese, Italiano, Inglese e Spagnolo
    con le lettere accentate e vengono compilati in ambienti differenti con compilatori differenti.

    Evitiamo quindi di parlare senza conoscere il problema... per favore!!!

    Quello che posso suggerire è impostare il locale e controllare la codifica di visualizzazione della shell o terminale
    
    #include <stdio.h>
    #include <locale.h>
    
    int main (void)
    {
        printf ("locale is %s\n",setlocale (LC_ALL,NULL));
        printf ("àèìòù\n");
        setlocale (LC_ALL,"");
        printf ("now locale is %s\n",setlocale (LC_ALL,NULL));
        printf ("àèìòù\n");
    }
    
    ~Max~
  • Direi che ora hai tutte le possibili soluzioni :

    --> puoi settare il locale;
    --> puoi utilizzare la libreria wchar per gestire l'UCS-4

    oppure, se aspetti qualche mesetto puoi scaricare dal mio sito () la mia libreria IsString che risolve tutti i problemi legati alla gestione delle stringhe a basso livello
    Scusate per la pubblicita` ihihih
  • La soluzione proposta da "ixamit" funziona perfettamente!

    Grazie per l'aiuto a tutti, ancora ho molto da imparare!
    Robi
  • Figurati, per chi non sa come funzionano le cose, gli accenti sono sempre un problema
    Alla prossima!!

  • Per colpa di un accento
    un tale di Santhià
    credeva d'essere alla meta
    ed era appena a metà.
    ...
    di Gianni Rodari posted by ixamit
  • In C basta stampare il carattere utilizzando il relativo codice ASCII tramite %c vi faccio vedere un esempio per stampare la è
    Dichiaro una costante per comodità:
    #define CSPECIALE 138

    printf("Questa %c una prova!!!\n", CSPECIALE);

    spero di essere stata d'aiuto
  • Guarda che il thread è di 9 anni fa... nove anni...

    Fai attenzione quando rispondi
Devi accedere o registrarti per scrivere nel forum
13 risposte