Laboratorio di Programmazione. AA 2007/08.
Esercitazione n. 11
Scopo di questa esercitazione è di familiarizzarsi con le
function di input/output del C e in particolare con la
lettura di stringhe mediante scanf.
Al solito, si suggerisce di creare una directory apposita per i
files relativi a questa esercitazione.
Ricordare inoltre che i prototipi delle function di libreria per
operare sulle strighe risiedono nel file di header string.h.
- Leggera una stringa lunga meno di 20 caratteri da stdin
mediante scanf("%s",buf) assegnandola ad un array di
caratteri dichiarato come char buf[20]; e far scrivere la
lunghezza
effettiva della stringa (inclusiva del carattere di terminazione della stringa, calcolabile come strlen(buf)+1) oltre
alla
stringa stessa. Immettere in input una stringa di lunghezza maggiore o
uguale a
20
caratteri. Cosa succede ?
Modificare il convertitore di formato in "%20s" e riprovare a
dare un input più lungo di 20 caratteri. Che succede se l' input
consta di esattamente 20 caratteri ?
- Se la stringa in input nel precedente esercizio contiene spazi,
con il convertitore di formato %s si legge solo a partire dal primo
carattere diverso da spazio fino a (ed escluso) il prossimo spazio
(o newline). Per leggere una stringa che contenga spazi occorre
il seguente convertitore di formato: "%[^\n]" (legge dall' inizio della
riga di input fino al carattere di newline).
Provare nel precedente programma (anche nella versione "%20[^\n]") e
verificarne il funzionamento.
- Il valore di ritorno di scanf (o fscanf o sscanf) è
un intero che conta gli argomenti che sono stati letti con successo.
Creare un file di testo contenente poche linee in ciascuna delle quali
sia scritto un intero. Aprire il file in lettura mediante fopen ed
usare il valore di ritorno di scanf (con convertitore di formato adatto alla lettura di interi) per contare i dati da leggere. Quindi
allocare spazio per un array in grado di contenere gli interi del
file, ritornare all' inizio del file (istruzione rewind) e rileggerlo riempiendo gli elementi
dell' array.
- Utilizzare getchar e putchar per realizzare un programma
che scriva su stdout i caratteri di input, trasformando le
eventuali lettere maiuscole in minuscole.
-
Definiamo parola ogni sequenza di caratteri separati da un numero arbitrario di spazi o da segni di interpunzione (,.;:?!) o dal carattere di newline ('\n'). Pianificare e implementare un programma che conti le parole di un file secondo la definizione sopra data.
-
Il seguente programma contiene un errore. Compilarlo con l' opzione -g in modo da poter utilizzare al meglio il debugger per seguire l' esecuzione passo dopo passo alla ricerca dell' errore.
#include <stdio.h>
#include <math.h>
int main(void){
float i, x=0;
for (i=0; i!=10; i+=0.1 )
x+=sqrt(i);
printf("%d\n", i);
}
N.B. L' esercizio, svolto in laboratorio utilizzando l' interfaccia grafica ddd per il debugger gdb, può essere ignorato da chi, non potendo seguire le lezioni, si trovasse a operare in ambiente diverso da quello unix/gnu dell' aula informatica.