The UNIX and Linux Forums  


Go Back   UNIX e Linux Forum > Inizio Forum > UNIX for Dummies Domande & Risposte
.
google unix.com



UNIX for Dummies Domande & Risposte Se non sei sicuro dove pubblicare un UNIX o Linux domanda, posta da qui. Tutti i neofiti di Linux e UNIX benvenuto!

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Floating Point Eccezione Mandar123 Linux 3 01-22-2009 09:51 AM
In virgola mobile a eccezione! ssk01 Linux 3 12-24-2008 02:20 PM
In virgola mobile di errore in C Hara Di programmazione ad alto livello 2 06-18-2008 06:43 AM
Arrotondamento del valore di valore virgola mobile damansingh Shell scripting e di programmazione 7 05-21-2008 10:46 AM
Floating Point Divisione gsatch Shell scripting e di programmazione 1 07-25-2002 05:03 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 03-11-2009
headrush headrush is offline
Utente Registrato
  
 

Iscriviti Data: marzo 2009
Interventi: 1
in virgola mobile di errore in Linux + C

Ecco un programma e la sua piuttosto semplice. Essa richiede la gestione dei file e alcuni calcoli, ma il funzionamento non mi è sempre richiesto result.It sembra che il codice di leggere il file al di fuori del circuito esterno, mentre l'esecuzione non è ad esempio la stampa non è in fase di stampa . Plz Help!

# include <stdio.h>
# include <stdlib.h>
# include <ctype.h>

int main (int argc, char * args [])
(
FILE * fp;
char ch;
int carico \u003d 0, il valore \u003d 0, peso \u003d 0;
int i \u003d 0, count \u003d 0, p, k \u003d 1, j, * costo, linea \u003d 1, u;
if (argc! \u003d 2) (
printf ( "\ nInsufficient no. di argomenti");
exit (0);
)
fp \u003d fopen (args [1], "r");
if (fp \u003d\u003d NULL) (
printf ( "\ nFile non può essere aperto");
exit (0);
)
while ((ch \u003d fgetc (fp ))!\u003d' \ n ') (
if (isdigit (ch)) (
ch-p \u003d'0 ';
load \u003d carico * 10 + p;
)
)
printf ( "\ nload \u003d% d \ n", carico);
i \u003d 0;
while ((ch \u003d fgetc (fp)! \u003d EOF)) (
value \u003d 0;
peso \u003d 0;
k \u003d 0;
u \u003d 0;
while (ch! \u003d '\ n') (
/ / Printf ( "\ nline \u003d% d,% d \u003d peso, il valore \u003d% d", linea, peso, valore);

if ((isalpha (ch) | | isdigit (ch)) & & k \u003d\u003d 0) (
while (ch! \u003d '') (
ch \u003d fgetc (fp);
)
k + +;
)
if (peso \u003d\u003d 0) (
while (ch! \u003d '') (
ch-p \u003d'0 ';
peso \u003d peso * 10 + p;
ch \u003d fgetc (fp);
)
)
/ / Printf ( "\ nweight \u003d% d", peso);
if (valore \u003d\u003d 0) (
while (ch! \u003d '\ n') (
ch-p \u003d'0 ';
value \u003d value * 10 + p;
ch \u003d fgetc (fp);
)
)
/ / Printf ( "\ nValue \u003d% d", valore);
if (ch \u003d\u003d '') (
while (ch \u003d\u003d '') (
ch \u003d fgetc (fp);
)
)
)

u \u003d valore / peso;
printf ( "linea% d \u003d peso \u003d% d, il valore \u003d% d, costo \u003d% d \ n", linea, il peso, il valore, u);
linea + +;
)
/ / Count \u003d i-1;
fclose (fp);
return 0;
)

Il file di testo che sto utilizzando è strettamente il seguente formato:
1250
LJS93K 1300 10500
J38ZZ9 700 4750
HJ394L 200 3250
01IE82 75 10250

vi è una linea-break al termine di ogni riga e la prima linea (1250) è il "carico" di valore, la prima colonna di ogni essere è quello di evitare la 2a colonna è il peso e il valore è 3a colonna.
Una cosa sto utilizzando ubuntu distro che usa shell bash!
  #2 (permalink)  
Old 03-11-2009
Corona688 Corona688 is offline
Utente Registrato
  
 

Join Date: Aug 2005
Località: Saskatchewan
Interventi: 1.969
Codice tag per il codice per favore, che la rendono illeggibili leggibile. [Code] roba [/ code] senza spazi aggiuntivi.

Vedrete 'errore in virgola mobile', quando lo si divide per zero, controllare per vedere se le cose sono sempre analizzato il modo in cui ci si aspetta.

Non è necessario utilizzare fgetc di leggere i dati di testo! Prova scanf. O meglio ancora, sscanf. Leggere i dati in una riga alla volta poi mangimi attraverso scanf per ottenere ciò che si desidera in una sola volta.


Codice:
char buf[512], garbage[512];
if(fgets(buf, 512, fp)==NULL0
{
  fprintf(stderr, "Can't read first line\n");
  return(1);
}

if(sscanf(buf, "%d", &load) != 1)
{
  fprintf(stderr, "Can't get load value\n");
  return(1);
}

while(fgets(buf, 512, fp)!=NULL)
{
  if(sscanf(buf, "%s %d %d", garbage, &weight, &value) != 3)
  {
    fprintf(stderr, "Couldn't parse line '%s'\n", buf);
    continue;
  }

  do_stuff();
}

Avrete puristi lamentano scanf e dei suoi pericoli, ma il suo gran lunga preferibile a costruire il proprio intero-analisi di routine. Usato in questo modo è abbastanza sicuro, senza rischio di buffer overflow e nessuna delle strano mezzo-un-linea-mangiato problemi pianura scanf è infame per.

Ultimo a cura di Corona688; al 03/11/2009 11:25 PM.. Motivo: l'aggiunta di codice più
Closed Thread

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 07:37 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0