Approfondimento : printf

Documenti analoghi
Approfondimento : printf

Introduzione alla programmazione in C

Ingresso ed Uscita in C. Informatica 1 / 15

Ingresso ed Uscita in C. Luca Abeni

Input/Output di numeri

Formattazione avanzata. Modificatori di formato in output Modificatori di formato in input Stream predefiniti

Formattazione avanzata. I/O Avanzato e File. Formattazione dell output. Formattazione avanzata. Forma completa degli specificatori

Funzioni di I/O per numeri. Input e output di valori numerici. Input formattato scanf. Stream preesistenti

1

Parsing. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Lezione V Fondamenti di Ingresso/Uscita

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013

INPUT E OUTPUT DI VALORI NUMERICI

Programmazione (imperativa)

scanf: STRINGA DI FORMATO

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Le funzioni, e le istruzioni di input/output

Le variabili nel linguaggio C

Struttura dei programmi e Variabili

Introduzione al linguaggio C

Espressione di chiamata di funzione

Introduzione alla programmazione in linguaggio C

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

Rappresentazione di interi

LIBRERIE STANDARD in C Le librerie standard

LIBRERIE STANDARD in C

Introduzione alla programmazione. Alice Pavarani

Un po di ripasso + qualcosa di nuovo

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Introduzione a Unix. Barbara Guidi. Corso Informatica I /2013. Dipartimento di Informatica Università di Pisa

Laboratorio di programmazione

Caratteri e stringhe

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Tipi di dato semplici

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Primi programmi in C

Primi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 04 Input/Output

Corso sul linguaggio C

Introduzione alle operazioni di I/O con formato e tipi primitivi

Dati due punti sul piano calcolare la loro distanza

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

Precisazione sui tipi in ANSi C

I Fondamenti del Linguaggio

Tipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Introduzione al linguaggio C Primi programmi

Le librerie standard. ! La libreria standard del C è in realtà un insieme di librerie

Lezione 5: Introduzione alla programmazione in C

Esercizi Programmazione I

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Settimana n.12. Obiettivi File!di!testo. Contenuti Concetto!di!file!e!funzioni! fopen/fclose Funzioni!fgets+sscanf Approfondimenti!su!printf! e!

Precedenza & associatività degli operatori C

Lezione 22: Input/Output e Files

Gocce di Java. Gocce di Java. Tipi di dato primitivi. Pierluigi Crescenzi. Università degli Studi di Firenze

Il primo programma C. Un programma utile. Compilazione & linking con il compilatore GNU. Introduzione alla programmazione in linguaggio C

Capitolo 3. Input/Output formattato

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Elementi di Base del Linguaggio C

Lezione 11: Liste a Puntatori e Input/Output

Caratteri e stringhe

I CARATTERI E LE STRINGHE

Laboratorio di Algoritmi

Scrittura formattata - printf

Programmazione. Tipi di dato primitivi. Francesco Tiezzi. Scuola di Scienze e Tecnologie Sezione di Informatica Università di Camerino

Corso Programmazione

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Fondamenti di Informatica

Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

Tipi di dato. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

LEZIONE 1 LE BASI DEL LINGUAGGIO C

Tipi di dato semplici

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Laboratorio di Informatica I

Lab 03 Scanf e tempo di vita delle variabili

C O P Y R I G H T ( C ) W W W. F O N D A M E N T I. I N F O

Informatica. Stefano Lodi. 16 novembre in linguaggio C

I/O INTERATTIVO. scanf: quello che è indispensabile sapere printf: quello che è utile sapere

Laboratorio di informatica Ingegneria meccanica

Lezione 1. Ing. Colazzo Sebastiano

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

I/O da tastiera e direttive processore. Alessandra Giordani Lunedì 3 maggio

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Tipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

I/O Avanzato in C: scheda riassuntiva

Corso di Informatica A.A

Programmazione I - Laboratorio

Tipi di dato semplici

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

L AMBIENTE CODE BLOCKS E L IO

Alcune regole di base per scrivere un programma in linguaggio C

Il linguaggio C. Notate che...

Transcript:

Approfondimento : printf La funzione printf : stampa su standard input (video) dati complessi ha un formato articolato, molto potente ma spesso poco chiaro ha un numero di opzioni utili e poco conosciute

printf: esempi d'uso Scrivere output ben spaziato 1 23 100 : printf(" %3d %3d %3d \n", a, b, c); Scrivere testo e numeri: printf("%lf %c %lf\n", num1, simb, num2); Trasformare un decimale in esadecimale printf("%x", numero); Stampare solo i primi 3 decimali di un float printf("%.3f", numero);

printf int printf (const char *format, ); Il formato è una stringa costante (non può essere una variabile stringa) che può contenere : whitespaces: spazi,tabulazioni, invii a capo (\n) caratteri standard (qualunque sequenza di caratteri non bianchi che non inizi per %) specificatori di formato (che iniziano per %)

printf: il formato Gli specificatori di formato sono così fatti : %[flags][width][.prec][length]type (le parentesi quadre indicano un elemento opzionale) dove : flags Zero o più, in qualsiasi ordine, fra: +, spazio,, # o 0. Specifica cosa premettere ai valori numerici (vedi dettagli su man). width Specifica il numero minimo numero di caratteri da stampare per questo argomento. prec length type Specifica il numero massimo numero di caratteri da stampare per questo argomento. Per i floating point, il numero di decimali Lunghezza del tipo: hh, h, l, ll, L in ordine crescente fra char e long double. Oppure z, j, t (vedi dettagli su man). Un carattere che specifica il tipo di dato da leggere (vedi sotto).

printf: specificatori di tipo (type) type descrizione tipo argomento c Singolo carattere: stampa un singolo carattere. char d, i Intero decimale: un numero con un segno. int f, F Virgola mobile in notazione normale (fixed point). float e, E Virgola mobile in notazione standard ([-]d.ddd e[+/-]ddd). g, G Virgola mobile in notazione normale o standard (dipende da quello che è appropriato per il valore da rappresentare). o Intero ottale int float float s Stringa di caratteri terminata da \0 char * u Intero decimale unsigned unsigned int x, X Intero esadecimale int

Approfondimento : scanf La funzione scanf : legge da standard input (stdin, tastiera) dati complessi è quasi duale a printf (prende un formato e una lista di parametri) ma non del tutto è facilmente fonte di errori e incongruenze

Scanf: esempi d'uso Leggere una data (gg/mm/aaaa): scanf("%2d/%2d/%4d", &giorno, &mese, &anno); Leggere un'operazione aritmetica (su una riga): scanf("%lf %c %lf", &num1, &simb, &num2); Trasformare un esadecimale in decimale: scanf("%x", &numero); Leggere un singolo carattere: scanf(" %c", &carattere); (notate lo spazio prima del %c, necessario perchè questo pattern non elimina eventuali invii a capo e spazi lasciati nel buffer da scanf precedenti).

Scanf: il formato int scanf(const char *format, ); Il formato è una stringa costante (non può essere una variabile stringa) che può contenere : whitespaces: spazi,tabulazioni, invii a capo (\n) caratteri standard (qualunque sequenza di caratteri non bianchi che non inizi per %) specificatori di formato (che iniziano per %)

scanf: il formato Gli specificatori di formato sono così fatti : %[*][width][modifiers]type (le parentesi quadre indicano un elemento opzionale) dove : * width modifiers type Un asterisco fa si che i dati corrispondenti a questo argomento vengano letti dallo stdin ma ignorati (non salvati in un argomento) Specifica il numero massimo di caratteri da leggere per questo argomento Modifica le dimensioni: h : short int (per d, i and n), o unsigned short int (per o, u and x) l : (è una elle minuscola) long int (per d, i and n), o unsigned long int (per o, u and x), o double (per e, f and g) L : long double (per e, f e g) Un carattere che specifica il tipo di dato da leggere (vedi sotto)

scanf: il funzionamento La funzione : legge lo stdin e prova a riconoscere elementi così come indicati dal formato elimina automaticamente gli whitespace iniziali (quasi sempre) copia nelle variabili passate come argomento gli elementi riconosciuti con successo ritorna il numero di elementi riconosciuti e letti con successo (possono essere meno di quelli richiesti dal formato)

scanf: la logica L'input da tastiera è bufferizzato e resta nel buffer finchè qualcuno non lo rimuove. scanf cerca nel buffer i pattern (numeri decimali, floating poing, caratteri, ecc...) e mangia" (cioè toglie dal buffer) quelli che riconosce

scanf: il formato Gli specificatori di formato sono così fatti : %[*][width][modifiers]type (le parentesi quadre indicano un elemento opzionale) dove : * width modifiers type Un asterisco fa si che i dati corrispondenti a questo argomento vengano letti dallo stdin ma ignorati (non salvati in un argomento) Specifica il numero massimo di caratteri da leggere per questo argomento Modifica le dimensioni: h : short int (per d, i and n), o unsigned short int (per o, u and x) l : (è una elle minuscola) long int (per d, i and n), o unsigned long int (per o, u and x), o double (per e, f and g) L : long double (per e, f e g) Un carattere che specifica il tipo di dato da leggere (vedi sotto)

scanf: specificatori di tipo (type) c type descrizione tipo argomento Singolo carattere: legge il carattere successivo. Se è impostata una width differente da 1, legge width caratteri ma nessun terminatore di stringa viene aggiunto. NON ELIMINA GLI SPAZI INIZIALI. d Intero decimale: un numero con un segno (+ o -) opzionale prima. e, E, f, F, g, G Virgola mobile: numero decimale con un punto decimale, eventualmente preceduto da un segno (+ o -) ed eventualmente seguito da e (o E) ed un altro numero decimale. Per esempio: -732.103 o 7.12e4 char * int * float * o Intero ottale int * s Stringa di caratteri: legge una stringa generica di caratteri fino al prossimo whitespace. E' fortemente consigliato di usarlo sempre con uno width prefissato. char * u Intero decimale unsigned unsigned int * x, X Intero esadecimale int *

scanf: esempi d'uso Leggere una data (gg/mm/aaaa): scanf("%2d/%2d/%4d", &giorno, &mese, &anno); Leggere un'operazione aritmetica (su una riga): scanf("%lf %c %lf", &num1, &simb, &num2); Trasformare un esadecimale in decimale: scanf("%x", &numero); Leggere un singolo carattere: scanf(" %c", &carattere); (notate lo spazio prima del %c, necessario perchè questo pattern non elimina eventuali invii a capo e spazi lasciati nel buffer da scanf precedenti).

Particolari da tenere a mente Ci sono alcuni punti che è bene tenere a mente e ricordare. 1. La funzione scanf ritorna il numero di elementi correttamente letti: se leggete più di un elemento per volta, dovreste controllare il valore ritornato per assicurare che tutte le variabili siano inizializzate. 2. Per leggere un singolo carattere DOVETE premettere il %c (nel formato) con uno spazio bianco: come spiegato prima, il %c non elimina gli spazi bianchi rimasti sul buffer ed in particolare ogni invio a capo residuo da scanf precedenti!