[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: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- 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 3 set 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
Numeri mmm.nnn (US-ASCII) con numeri mmm,nnn (IT).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
Sia nella lettura che nelle variabili predefenite.
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 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
ESATTO, man 3 fgetsmasalapianta 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) )?
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 25 lug 2005, 0:00
- Nome Cognome: famoso porco
- Kernel: uname -r
- Desktop: awesome
- Distribuzione: Debian
- Località: Roma
- Contatta:
Re: [C] valore predefinito se nullo
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 \nsya54M ha scritto:io non do niente, quel codice non aspetta nessun input e assegna direttamente 0.000000
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 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);
}
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: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] valore predefinito se nullo
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'inputmasalapianta ha scritto: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 \nsya54M ha scritto:io non do niente, quel codice non aspetta nessun input e assegna direttamente 0.000000
- sya54M
- Master
- Messaggi: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- 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: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- 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 25 lug 2005, 0:00
- Nome Cognome: famoso porco
- Kernel: uname -r
- Desktop: awesome
- Distribuzione: Debian
- Località: Roma
- Contatta:
Re: [C] valore predefinito se nullo
non è arroganza, come ho scritto fatico a capire i tuoi postsya54M ha scritto:allora, non serve essere arroganti che nessuno ti obbliga a rispondere.masalapianta ha scritto: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 \nsya54M ha scritto:io non do niente, quel codice non aspetta nessun input e assegna direttamente 0.000000
no, la fgets è bloccante e non ritorna fintanto che non legge EOF o \n (a meno di errori di lettura, tornati dalla read() ), chiaro?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: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] valore predefinito se nullo [risolto]
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 suomasalapianta 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?
- nyquist
- Linux 2.x
- Messaggi: 269
- Iscritto il: sab 2 ago 2008, 16:02
- Nome Cognome: Cristiano Urban
- Slackware: 14.2 multilib
- Kernel: 4.4.240
- Desktop: KDE
- Località: Gonars (UD)
- Contatta:
Re: [C] valore predefinito se nullo [risolto]
Di niente, ci mancherebbe!sya54M ha scritto: comunque ringrazio nyquist per l'importante spunto
L'importante è che tu abbia risolto.