Quote:
Originariamente inviato da Alex 10
Codice:
#include <stdio.h>
#include <stdlib.h>
int scanf(){
int dato;
printf("Introdurre un valore intero: ");
scanf("%d",&dato);
return;
}
int main(){
while (flag=0){
scanf();
if (scanf>0)
flag=1;
return 0;
}
|
Io inizierei dando un altro nome alla funzione che devi scrivere, anche per non fare confusione quando parliamo. Scegli tu un nome, ora io la chiamerò readInt.
Secondo le richieste del tuo professore readInt deve ritornare un intero letto da tastiera oppure EOF se viene premuto CTRL+Z.
Il main deve richiamare la funzione in modo da non essere implicato nella soluzione di questo particolare problema. In pratica il main sarà ad esempio:
Codice:
int main(){
int val=readInt();
if(val!=EOF)
printf("Hai inserito: %d\n",val);
else printf("Hai premuto CTRL+Z\n");
}
In pratica ti sto dicendo di spostare il ciclo while dentro la funzione stessa invece di eseguirlo nel main.
Poi c'è un problema: scanf se restituisce 0 non consuma dati nel buffer, quindi continuare a richiamare scanf non risolve il problema se viene inserito un "non intero" (vai in loop infinito). Era per risolvere questo problema che consigliavo di usare getchar: puoi leggere carattere per carattere finché non giungi alla fine del buffer (quindi '\n') e poi riprovare la lettura con scanf (o restituire EOF se invece di '\n' hai trovato EOF).
PS: un'altra cosa, hai incluso stdlib.h ma per risolvere questo problema non serve