[C] valore predefinito se nullo [risolto]
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- sya54M
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] valore predefinito se nullo
io non do niente, quel codice non aspetta nessun input e assegna direttamente 0.000000
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun set 03, 2007 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [C] valore predefinito se nullo
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
Numeri mmm.nnn (US-ASCII) con numeri mmm,nnn (IT).
Sia nella lettura che nelle variabili predefenite.
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun set 03, 2007 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [C] valore predefinito se nullo
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) )?
ESATTO, man 3 fgets
Codice: Seleziona tutto
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.
- masalapianta
- Iper Master
- Messaggi: 2775
- Iscritto il: lun lug 25, 2005 0:00
- Nome Cognome: famoso porco
- Kernel: uname -r
- Desktop: awesome
- Distribuzione: Debian
- Località: Roma
- Contatta:
Re: [C] valore predefinito se nullo
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
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun set 03, 2007 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [C] valore predefinito se nullo
Codice: Seleziona tutto
#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);
}
Funziona, per controllo cambiato #define VISC_ACQUA 0.000321,
scrittura stile UNIX anni 1980+ perche' abituato al vecchio modo,
compilato con gcc -O2 -s -static,
anche con un solo Return il valore "ni" e` esatto,
con ,789 (virgola) oppure .456 (punto) li legge.
- sya54M
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] valore predefinito se nullo
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
- sya54M
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] valore predefinito se nullo
ho risolto, ecco:
Codice: Seleziona tutto
...
#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
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] valore predefinito se nullo [risolto]
comunque ringrazio nyquist per l'importante spunto
- masalapianta
- Iper Master
- Messaggi: 2775
- Iscritto il: lun lug 25, 2005 0:00
- Nome Cognome: famoso porco
- Kernel: uname -r
- Desktop: awesome
- Distribuzione: Debian
- Località: Roma
- Contatta:
Re: [C] valore predefinito se nullo
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.
non è arroganza, come ho scritto fatico a capire i tuoi post
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
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
- Master
- Messaggi: 1608
- Iscritto il: mer giu 06, 2007 14:44
- Nome Cognome: Andrea P.
- Slackware: 64-current
- Kernel: 4.16.x
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] valore predefinito se nullo [risolto]
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?
sarà, ma a me non "bloccava" niente come dici tu... ho dovuto mettere una getchar per farlo attendere, altrimenti era come se si leggesse un \n da chissà dove per conto suo
- nyquist
- Linux 2.x
- Messaggi: 256
- Iscritto il: sab ago 02, 2008 16:02
- Nome Cognome: Cristiano Urban
- Slackware: 14.2 x86_64
- Kernel: 4.4.88
- Desktop: KDE
- Località: Gonars (UD)
- Contatta:
Re: [C] valore predefinito se nullo [risolto]
sya54M ha scritto:comunque ringrazio nyquist per l'importante spunto
Di niente, ci mancherebbe!

L'importante è che tu abbia risolto.