![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
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! |
|
||||
|
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ù |
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|