[C] valore predefinito se nullo [risolto]

Forum dedicato alla programmazione.

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.
Avatar utente
sya54M
Master
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

Messaggio da sya54M »

io non do niente, quel codice non aspetta nessun input e assegna direttamente 0.000000

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

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.

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

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.

Avatar utente
masalapianta
Iper Master
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

Messaggio da masalapianta »

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

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

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.

Avatar utente
sya54M
Master
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

Messaggio da sya54M »

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

Avatar utente
sya54M
Master
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

Messaggio da sya54M »

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);
  ...
}
...

Avatar utente
sya54M
Master
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]

Messaggio da sya54M »

comunque ringrazio nyquist per l'importante spunto

Avatar utente
masalapianta
Iper Master
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

Messaggio da masalapianta »

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?

Avatar utente
sya54M
Master
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]

Messaggio da sya54M »

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

Avatar utente
nyquist
Linux 2.x
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]

Messaggio da nyquist »

sya54M ha scritto: comunque ringrazio nyquist per l'importante spunto
Di niente, ci mancherebbe! :D
L'importante è che tu abbia risolto.

Rispondi