![]() |
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| UNIX for Dummies Questions & Answers Wenn Sie nicht sicher sind, wo Sie eine UNIX-oder Linux-Frage, post it here. Alle UNIX-und Linux-Anfänger willkommen! |
Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
|
||||
| Faden | Thread Starter | Forum | Antworten | Last Post |
| Floating Point Exception | Mandar123 | Linux | 3 | 01-22-2009 09:51 AM |
| Fließkomma-Ausnahme! | ssk01 | Linux | 3 | 12-24-2008 02:20 PM |
| Fließkomma-Fehler in C | Hara | High-Level-Programmierung | 2 | 06-18-2008 05:43 AM |
| Ergänzt wird der Wert der Fließkomma-Wert | damansingh | Shell Programmierung und Scripting | 7 | 05-21-2008 09:46 AM |
| Floating Point Division | gsatch | Shell Programmierung und Scripting | 1 | 07-25-2002 04:03 PM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
Fließkomma-Fehler in Linux + C
Hier ist ein Programm und seine ziemlich einfach. Es erfordert Dateien und einige Berechnungen, sondern es läuft Ich bin mir nicht immer die erforderliche result.It scheint, dass der Code außerhalb der Datei lesen, die äußeren while-Schleife ist nicht der Ausführung zB der Druck-Anweisung wird nicht gedruckt . plz help!
# include <stdio.h> # include <stdlib.h> # include <ctype.h> int main (int argc, char * args []) ( FILE * fp; char ch; int load \u003d 0, value \u003d 0, weight \u003d 0; int i \u003d 0, count \u003d 0, p, k \u003d 1, J, * Kosten, line \u003d 1, u; if (argc! \u003d 2) ( printf ( "\ nInsufficient-Nr. Argumente"); exit (0); ) fp \u003d fopen (args [1], "r"); if (fp \u003d\u003d NULL) ( printf ( "\ nFile konnte nicht geöffnet werden"); exit (0); ) while ((ch \u003d fgetc (fp ))!\u003d' \ n ') ( if (isdigit (ch)) ( CH-p \u003d'0 '; load \u003d load * 10 + p; ) ) printf ( "\ nLOAD \u003d% d \ n", Last); i \u003d 0; while ((ch \u003d fgetc (fp)! \u003d EOF)) ( Wert \u003d 0; Gewicht \u003d 0; k \u003d 0; u \u003d 0; while (ch! \u003d '\ n') ( / / Printf ( "\ nline \u003d% d, Gewicht \u003d% d, value \u003d% d", Linie, Gewicht, Wert); if ((isalpha (CH) | | isdigit (ch)) & & k \u003d\u003d 0) ( while (ch! \u003d '') ( ch \u003d fgetc (fp); ) k + +; ) if (Gewicht \u003d\u003d 0) ( while (ch! \u003d '') ( CH-p \u003d'0 '; Gewicht \u003d Gewicht * 10 + p; ch \u003d fgetc (fp); ) ) / / Printf ( "\ nweight \u003d% d", Gewicht); if (value \u003d\u003d 0) ( while (ch! \u003d '\ n') ( CH-p \u003d'0 '; Wert \u003d Wert * 10 + p; ch \u003d fgetc (fp); ) ) / / Printf ( "\ nValue \u003d% d", value); if (ch \u003d\u003d '') ( while (ch \u003d\u003d '') ( ch \u003d fgetc (fp); ) ) ) u \u003d value / Gewicht; printf ( "line% d \u003d Gewicht \u003d% d, value \u003d% d, cost \u003d% d \ n", Linie, Gewicht, Wert, u); line + +; ) / / Count \u003d i-1; fclose (fp); return 0; ) Die Text-Datei, die ich unbedingt mit der das folgende Format: 1250 LJS93K 1300 10500 J38ZZ9 700 4750 HJ394L 200 3250 01IE82 75 10250 Es gibt einen Line-Pause nach jeder Zeile und die erste Zeile (1250) ist die "Last"-Wert, der ersten Spalte eines jeden ist, um zu vermeiden, die 2. Spalte ist Gewicht und die 3. Spalte Wert. ![]() Eine weitere Sache, die ich bin mit Ubuntu Distribution verwendet, die Bash-Shell! |
|
||||
|
Code-Tags für Code Bitte, sie machen das nicht lesbar lesbar. [Code] Bestellung [/ code] ohne Leerzeichen.
Sie erhalten "Floating Point Error", wenn Sie Division durch Null, prüfen Sie, ob die Dinge werden immer analysiert, wie Sie erwarten. Sie brauchen nicht zu verwenden fgetc zu lesen, in Text-Daten! Versuchen Sie scanf. Oder besser noch, sscanf. Lesen Sie Daten in einer Zeile in einer Zeit, dann durch scanf zu bekommen, was Sie in einem Rutsch. Code:
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();
}
In diesem Mode ist es ziemlich sicher, ohne Gefahr von Buffer Overflows und keiner von den seltsamen Halb-a-line-Probleme gegessen plain scanf ist für die berühmt-berüchtigten.Zuletzt bearbeitet von Corona688; am 03-11-2009 11:25 PM.. Grund: noch mehr Code |
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|