PDA

Visualizza la versione completa : [c] leggere da tastiera interi usando la read


xnavigator
21-04-2010, 20:11
ragazzi dovrrei leggere degli interi (composti da una sola cifra) da tastiera con la read...


il fatto che se faccio cosi:



int i;
read(0,i,1);


non mi fuzniona...

visual studio 2010 dice:


Run-Time Check Failure #3 - The variable 'i' is being used without being initialized.

Alex'87
21-04-2010, 20:35
Quella 'i' cosa indica? Il compilatore vuole che tu la inizializzi...

xnavigator
21-04-2010, 21:04
Originariamente inviato da Alex'87
Quella 'i' cosa indica? Il compilatore vuole che tu la inizializzi...

ninete una semplice variabile che dovrebbe essere valorizzata con la read

oregon
21-04-2010, 21:14
Scusa xnavigator ... ma il secondo parametro della read di che tipo dovrebbe essere ?

E soprattutto ... come funziona la read ?

Leggilo da un manuale ...

xnavigator
21-04-2010, 21:40
Originariamente inviato da oregon
Scusa xnavigator ... ma il secondo parametro della read di che tipo dovrebbe essere ?

E soprattutto ... come funziona la read ?

Leggilo da un manuale ...

letto deve essere un puntatore.

Per c' ancora qualceh problemino:



char buf;
printf("Inserisci il primo intero\n");

read(0,&buf,1);
printf("Intero: %c\n",buf);

printf("Inserisci il secondo intero\n");
fflush(NULL);

read(0,&buf,1);
printf("Intero: %c\n",buf);


molto semplicemente la prima read funziona.. Inserisco "1" e alla printf mi stampa correttamente Intero: 1.

Il problema che non mi fa inserire il secondo intero, praticmaetne mi salta la seconda read e termina direttametne.

HO provato a mettere fflush ma non cambia nulla...

vado a leggere nel manuale.. anceh se non capisco perch se la prima read funziona la seconda non dovrebbe funzionare ugualmetne =/

oregon
21-04-2010, 21:48
Originariamente inviato da xnavigator
letto deve essere un puntatore.

Ecco ... ci dimostra che si risparmiano un po' di problemi studiando prima l'argomento ...



Per ...



char buf;
printf("Inserisci il primo intero\n");

read(0,&buf,1);
printf("Intero: %c\n",buf);

while(getchar() != '\n') ;

printf("Inserisci il secondo intero\n");

read(0,&buf,1);
printf("Intero: %c\n",buf);

xnavigator
21-04-2010, 22:07
grazie mille (dannato buffer :dh: )


ho provato a recuperare i valori interi usando atoi... in questo modo:



char buf,buf2;
int sum;
printf("Inserisci il primo intero\n");
read(0,&buf,1);
while(getchar() != '\n') {}

printf("Inserisci il secondo intero\n");
read(0,&buf2,1);

printf("primo valore: %d, secondo valore: %d\n",atoi(&buf),atoi(&buf2));



il secondo valore sballato :(

output:


Inserisci il primo intero
1
Inserisci il secondo intero
2
primo valore: 1, secondo valore: 21



output2


Inserisci il primo intero
3
Inserisci il secondo intero
7
primo valore: 3, secondo valore: 73


e come se mi accodasse al secodno intero anche il primo (7+3) :d56:

antotan
21-04-2010, 22:23
Dato che devi semplicemente leggere degli interi, non ti conviene usare la scanf?



#include <stdlib.h>

int main()
{
int x;
int y;
printf(">> ");
scanf("%d", &x);
printf(">> ");
scanf("%d", &y);
printf("%d", x+y);
}

xnavigator
21-04-2010, 22:24
mi converrebbe molto.. ma devo fare un esercizio...

dopo devo anceh stampare a video la somma dei due interi con la write.............

ma lol... ho provato a farlo eseguire su windows e mi da tutto il contrario :biifu:



Inserisci il primo intero
1
Inserisci il secondo intero
2
primo valore: 12, secondo valore: 2

oregon
21-04-2010, 22:43
Non puoi usare la atoi perch non hai a disposizione delle stringhe terminate da null ma dei semplici char.

Dato che si tratta di semplici char, puoi usare l'operatore bitwise and

printf("primo valore: %d, secondo valore: %d\n", (buf & 0xF), (buf2 & 0xF));

Loading