PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] String in Int oder Float umwandeln



SSTX
05-08-2004, 15:38
Hi, ich habe ein kleines Problem.

Ich habe ein kleines Programm geschrieben, mit dem man die Seitengrößen einer PDF-Datei auslesen und auf dem Bildschirm ausgeben kann. Das funktioniert auch ganz gut. Jetzt will ich aber die Seitengrößen weiterverarbeiten und muß sie dazu in Integer oder Float umwandeln. Irgendwie bekomme ich das nicht so richtig hin.

Hat vielleicht jemand einen Tip für mich?

Hier der Code meines Programms:



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUF 255

int main(int argc, char **argv)
{
FILE *f;
char seite[80];
char seite1[80];
char seite2[80];
char *ptr;
char searchstring[BUF];
char puffer[BUF];
int counter=1,posi,b=1,rot=0,i;

if(argc < 2)
{
fprintf(stderr, "Verwendung : %s datei\n",*argv);
exit(0);
}
f=fopen(argv[1],"rb");
if(f == NULL)
{
printf("Fehler bei fopen()...");
exit(0);
}
while( fgets(puffer, BUF, f) != NULL )
{
if(strstr(puffer,"MediaBox") != 0) {
posi=strcspn( puffer, "x" );
if(puffer[posi-10]!=' ') rot=1;
strncpy(seite, strpbrk(puffer, "x"), 80);
strncpy(seite1, strpbrk(seite, "x"), strcspn( seite, "]" ));
seite1[strcspn( seite, "]" )]='\0';
strncpy(seite2, strpbrk(seite1, "123456789"), 30);
if (rot==1) {
ptr = strtok(seite2, " ");
ptr = strtok(NULL, " ");
printf("\nSeite %d: %sx",b,ptr);
ptr = strtok(seite2, " ");
printf("%s Punkte\n",ptr);
} else {
ptr = strtok(seite2, " ");
printf("Seite %d: %sx",b,ptr);
ptr = strtok(NULL, " ");
printf("%s Punkte\n",ptr);}
b++;rot=0;
}
counter++;
}
printf("\n");
system("Pause");
return 0;
}

panzi
05-08-2004, 15:57
Code Tags bitte (erst dann leße ich deine Code).

peschmae
05-08-2004, 17:27
char* nach int sollte mit atoi() zu machen sein.

MfG Peschmä

SSTX
05-08-2004, 23:04
Mit atoi() habe ich es auch schon versucht, aber irgendwie will das nicht so recht. Bin halt noch ein Newbie beim proggen! :rolleyes:

panzi
06-08-2004, 15:26
ich find sscanf besser als atoi, denn wie fundest du bei atoi heraus, ob's geklappt hat, bzw. wieviel des Strings konvertiert worden ist (bei sscanf mit %n die Zahl der konvertierten Zeichen auslesen!).

wraith
06-08-2004, 15:37
ich find sscanf besser als atoi, denn wie fundest du bei atoi heraus, ob's geklappt hat, bzw. wieviel des Strings konvertiert worden ist (bei sscanf mit %n die Zahl der konvertierten Zeichen auslesen!).
Deshalb gibt es ja auch die strtox Funktionen:
man strtol (http://www.hmug.org/man/3/strtoimax.html)
man strtod (http://www.hmug.org/man/3/strtold.html)
atoi ist wirklich etwas sparsam mit der Fehlerbehandlung.

SSTX
06-08-2004, 16:03
Danke für die vielen Tips. Ich werde es mal versuchen und über meine Erfolge berichten! :)

panzi
07-08-2004, 18:17
Deshalb gibt es ja auch die strtox Funktionen:
man strtol (http://www.hmug.org/man/3/strtoimax.html)
man strtod (http://www.hmug.org/man/3/strtold.html)
atoi ist wirklich etwas sparsam mit der Fehlerbehandlung.
Interessant, kannt ich noch garnet.