Avatar billede ulrikhjul Nybegynder
17. juli 2006 - 22:42 Der er 4 kommentarer

sscanf Hvordan med mellemrum?

Hej, jeg har et problem med sscanf()
Jeg bruger følgende linie til at "pille" nogle oplysninger ud af et txt dokument for mig.

sscanf(linie, "Pris: %d,00 DKK ( x %d)", &Pris, &Antalvarer);

Mit problem er, at nogle gange er Pris over 1000,- og så kommer det i formatet: 1 000 - altså med mellemrum.

Hvordan klarer jeg nemmest det?

Venlig hilsen
Ulrik
Avatar billede ulrikhjul Nybegynder
17. juli 2006 - 22:44 #1
...som det er nu, fungerer det fint, så længe prisen er under 1000 - hvis den er over får jeg kun det første ciffer ud - altså 1,- og det kan gå hen og blive dyrt :-)
Avatar billede bertelbrander Praktikant
17. juli 2006 - 23:28 #2
Du bliver nok nødt til at læse pris (og måske antal) over i en streng, fjerne mellemrum og bruge strtol til at lave om til int.

F.ex:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  int Antalvarer;
  char Pris[1024], Temp[1024];
  int P, N;
  sscanf(argv[1], "Pris: %[^,],00 DKK ( x %d)", Pris, &Antalvarer);
  for(N = 0, P = 0; Pris[N]; N++)
      if(Pris[N] != ' ')
        Temp[P++] = Pris[N];
  Temp[P] = 0;
  P = strtol(Temp, 0, 10);
  printf("%s - %d - %d\n", Pris, P, Antalvarer);
  return 0;
}
Avatar billede ulrikhjul Nybegynder
22. juli 2006 - 02:08 #3
Hej Bertel - og tusind tak - det virker præcist som det skal.
Men, jeg forstår ikke helt detaljerne, så hvis du vil smide et svar, og evt. forklare:

[^,]          //Hvad sker der her?
Pris[N]      //Denne måde at skrive en for løkke på - hvad tæller den op til?
                // det er da en char?
Temp[P] = 0;  //Hvordan kan du sætte Temp[P] til 0 som tal? det er da en char?
strtol        //Ultrakort forklaring af funktionen?

Sikkert super noob spørgsmål - men man lærer jo af at spørge ;-)

Tusind tak, og god weekend.

Venlig hilsen
Ulrik
Avatar billede bertelbrander Praktikant
22. juli 2006 - 14:46 #4
%[^,] betyder at den scanner og gemmer char's (en streng) indtil den møder et ,

Pris[N] er den N'te char i Pris

Temp[P] = 0 null-terminerer strengen, dvs fortæller hvor den slutter.

strtol er en forkortelse af string-to-long, dvs den konverterer en streng til en long (eller i dette tilfælde en int). Første argument er strengen. Andet argument kan være en pointer til en pointer der bliver sat til at pege på den første char der ikke indgik i konverteringen, det bruges mest til at checke fejl, den bruges ikke her. Sidste argument fortæller hvilken "base" den skal bruge til konvertering, jeg skrev 10 for ti-talssystem, man kan også bruge 2 for binære tal eller 16 for hex, eller 0 hvis den selv skal finde ud af at det.

Jeg samler ikke på point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester