Moderatore: Staff

sya54M ha scritto:infatti, ma a me è peggio: nemmeno un return e mi da direttamente sempre 0.000000
non ho capito cosa vuoi dire con mescolare

masalapianta ha scritto:se non dai un return e basta il codice funziona, ma se dai un return e basta, come pretendi che fgets() torni NULL se tu non levi il "\n" (torna NULL solo se c'è l'EOF ma non è stato letto alcun carattere, ma se dai invio e basta viene letto un carattere (\n) )?
fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. A '\0' is stored after the last character in the buffer.

sya54M ha scritto:io non do niente, quel codice non aspetta nessun input e assegna direttamente 0.000000

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#define VISC_ACQUA 0.000321
#define STR_VISC_LEN 16
void progetto_tre_serbatoi()
{
float ni;
char str_ni[STR_VISC_LEN];
printf("\nViscosita' [10^-6]: ");
if (fgets(str_ni, STR_VISC_LEN, stdin))
;
else
ni = VISC_ACQUA;
printf("%f\n%s\n", ni, str_ni);
}
main(void)
{
progetto_tre_serbatoi();
exit(0);
}

masalapianta ha scritto:sya54M ha scritto:io non do niente, quel codice non aspetta nessun input e assegna direttamente 0.000000
eh? che significa? sinceramente fatico a capire i tuoi post; comunque resta il fatto che, il problema che riscontri, è dato dal fatto che la tua fgets non tornerà NULL se dai un invio nel terminale, perchè infilerà nel buffer un \n

...
#define VISC_ACQUA 0.000001
#define STR_VISC_LEN 16
...
void progetto_tre_serbatoi() {
float ni, eps;
float Ymax, Ymed, Ymin, Yn=0;
float D1, D2, D3, L1, L2, L3, Q1=1, Q2=1, Q3=1, iR1=0, iR2=0, iR3=0, J1=0, J2=0, J3=0;
char str_ni[STR_VISC_LEN];
printf("\nViscosita' [10^-6]: ");
getchar();
if(strlen(fgets(str_ni, STR_VISC_LEN, stdin)) < 2)
ni = VISC_ACQUA;
else
ni = atof(str_ni);
printf("%f\n", ni);
...
}
...


sya54M ha scritto:masalapianta ha scritto:sya54M ha scritto:io non do niente, quel codice non aspetta nessun input e assegna direttamente 0.000000
eh? che significa? sinceramente fatico a capire i tuoi post; comunque resta il fatto che, il problema che riscontri, è dato dal fatto che la tua fgets non tornerà NULL se dai un invio nel terminale, perchè infilerà nel buffer un \n
allora, non serve essere arroganti che nessuno ti obbliga a rispondere.
ma non c'è altro modo di dirlo che io non premo alcun tasto (nemmeno il return), la funzione non rimane in attesa di input e assegna direttamente 0 alla variabile (va direttamente in stampa a schermo). per quanto riguarda il null, è solo l'ultimo tentativo fatto, perchè ho provato in tanti modi, anche con strlen e confrontare la lunghezza... ma l'fgets non richiede mai l'input

masalapianta ha scritto:no, la fgets è bloccante e non ritorna fintanto che non legge EOF o \n (a meno di errori di lettura, tornati dalla read() ), chiaro?

sya54M ha scritto:comunque ringrazio nyquist per l'importante spunto

Visitano il forum: Google [Bot] e 0 ospiti