Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] conversione ASCII

  1. #1

    [C] conversione ASCII

    Acquisire una variabile intera tra 0 e 127
    visualizzarne il carattere ASCII
    codice:
    #include <stdio.h>
    
    int main()
    {
    	int a;
    	printf("inserire un valore da convertire in ascii compreso tra 0 e 127. \n");
    	scanf("%d",&a);
    	
    		if(a<0)
        	{
    		printf("a deve essere compreso tra 0 e 127 riavvia il programma \n");
    		}
    		if(a>127)
    		{
    		printf("a deve essere compreso tra 0 e 127 riavvia il programma \n");
    		}
    
    		else
    		{
    		printf("ASCII CODE: %d ",a);
    		}
    return 0;	
    }
    ovviamente è pronto fino al punto in cui si chiede che la variabile sia compresa tra 0 e 127
    e ne ristampa il valore iniziale..
    il mio dilemma è che conosco vari tipi di varibiali tipo intere float double char in particolare mi riferisco a questa stringa:
    codice:
    printf("ASCII CODE: %d ",a);
    quel %d è di tipo intero e mi restituisce l'input so che esiste %f %c %x (hex) MA PER L'ASCII??? % che cosa? oppure come posso implementare altri pezzi di codice

    non vorrei dover inserire a mano tutta la tabella.

    grazie

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Le stringhe del C si basano sull'ASCII quindi ti basta il %c del carattere, è possibile un warning da parte del compilatore se fai solo questa sostituzione, non dovrebbe dare problemi, ma se vuoi toglierlo basta aggiungere un type-casting.

    quindi:

    codice:
    printf("ASCII CODE: %c ",(char)a);
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Il warning ha ragione: quel casting ci deve essere, altrimenti passi alla printf un tipo diverso da quello che si aspetta, il che risulta in undefined behavior.
    In pratica, se stampi solo quello non accade nulla di strano su macchine little endian, ma su macchine big endian viene stampato sempre e solo il carattere 0. Se invece nella stessa printf dopo stampi anche altri campi ottieni un gran casino.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Infatti non ho detto che sia incorretto il suo uso...
    Ho solo constatato il fatto che funziona comunque nella maggior parte dell'hardware in uso e che molti lo omettono, ma se vedi la mia riga di codice io l'ho incluso, amo la correttezza.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Sottolineavo semplicemente il fatto che quel casting non è opzionale, come poteva sembrare leggendo la tua risposta, ma è richiesto dal linguaggio C. I "molti" che lo omettono hanno torto (anche perché l'ottimizzatore spesso sfrutta i casi di undefined behavior, indipendentemente dal comportamento che ci si aspetta su una determinata architettura).
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    risolto grazie mille, gentilissimi

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 © 2025 vBulletin Solutions, Inc. All rights reserved.