Repository 32bit  Forum
Repository 64bit  Wiki

[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.

Re: [C] valore predefinito se nullo

Messaggioda sya54M » ven dic 17, 2010 9:30

io non do niente, quel codice non aspetta nessun input e assegna direttamente 0.000000
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [C] valore predefinito se nullo

Messaggioda Mario Vanoni » ven dic 17, 2010 15:25

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 set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [C] valore predefinito se nullo

Messaggioda Mario Vanoni » ven dic 17, 2010 15:32

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.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [C] valore predefinito se nullo

Messaggioda masalapianta » ven dic 17, 2010 16:18

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
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

Re: [C] valore predefinito se nullo

Messaggioda Mario Vanoni » ven dic 17, 2010 18:21

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.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [C] valore predefinito se nullo

Messaggioda sya54M » sab dic 18, 2010 11:44

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
Linux 3.x
Linux 3.x
 
Messaggi: 1429
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [C] valore predefinito se nullo

Messaggioda sya54M » sab dic 18, 2010 15:50

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
Linux 3.x
Linux 3.x
 
Messaggi: 1429
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [C] valore predefinito se nullo [risolto]

Messaggioda sya54M » sab dic 18, 2010 17:36

comunque ringrazio nyquist per l'importante spunto
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [C] valore predefinito se nullo

Messaggioda masalapianta » dom dic 19, 2010 17:42

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
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

Re: [C] valore predefinito se nullo [risolto]

Messaggioda sya54M » dom dic 19, 2010 17:49

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
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1429
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.14.x
Desktop: KDE 4.13

Re: [C] valore predefinito se nullo [risolto]

Messaggioda nyquist » dom dic 19, 2010 23:30

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

Di niente, ci mancherebbe! :D
L'importante è che tu abbia risolto.
Avatar utente
nyquist
Linux 2.4
Linux 2.4
 
Messaggi: 217
Iscritto il: sab ago 02, 2008 15:02
Località: Gonars (UD)
Nome Cognome: Cristiano Urban
Slackware: 14.1 x86
Kernel: 3.10.17-smp
Desktop: KDE 4.10.5
Distribuzione: CentOS, Fedora

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron