Pālekt uz saturu


Foto
- - - - -

Problēma ar scanf valodā C


  • Lūdzu pieslēdzies, lai atbildētu
5 atbildes uz šo tēmu

#1 The Only

The Only
  • Biedri
  • 204 raksti

Pievienots 20 April 2012 - 22:15

Uzdevums pavisam vienkāršs: Jāievada datums un laiks, piem., 22.12.2011 12:45.

Problēma ir tajā, ka ja ievada 08.12.2011 12:45 vai 09.12.2011 12:45, tad ievade ir kļūdaina (08 vai 09 var atrasties gan mēneša vietā, gan laika stundu vai minūšu vietā), bet ja ievada 07.12.2011 12:45, tad viss ir normāli (protams visi skaitļi no 01 līdz 07 der)

Problēma man ar kompi, jo tas parādās gan uz Ubuntu emulatora, gan CodeBlocks zem Win?

printf ("Ievadi datumu un laiku (dd.mm.gggg hh:mm): ");
scanf ("%2i.%2i.%4i %2i:%2i", &day, &month, &year, &hours, &min);

printf ("%.2i.%.2i.%4i %.2i:%.2i\n", day, month, year, hours, min);

Šo rakstu rediģēja The Only: 20 April 2012 - 22:16


#2 binary

binary
  • Biedri
  • 2095 raksti
  • Atrodos:Rīga

Pievienots 20 April 2012 - 22:20

Lieto %d vai %u, nevis %i.

%i saprot gan decimālo pierakstu (123), gan hex pierakstu (0xFF), gan oktālo (0666 => 438). Oktālajā sistēmā nav tādu ciparu kā 8 vai 9, tāpēc arī kļūdas.

#3 valka

valka
  • Jaunbiedri
  • 17 raksti

Pievienots 23 April 2012 - 12:42

Nu nepi... šitā ar `scanf()`. Nolasi ievadi kā vienu veselu un tad parsē pats kā tev tīk ar `strtok()` un kompānija iz `string.h`. Darba vairāk, bet vismaz uz `scanf()` niķiem kaklu nelauzīsi, un kas zin, varbūt iemācīsies ko noderīgu. :sarkasms:

#4 bubu

bubu
  • Lietpratējs
  • 1063 raksti

Pievienots 24 April 2012 - 03:30

Kas vaina scanf? Vienā rindā smuki var noparsēt stringu uz vairākiem mainīgiem. Bet ar strtok būs mega daudz rindas.
Tu viena printf vietā, kas izdrukā 5 mainīgos, arī lieto 5 printf'us?

#5 Somebody

Somebody
  • Biedri
  • 118 raksti

Pievienots 24 April 2012 - 08:23

Nulle priekšā nosaka, ka skaitlis ir oktālajā pierakstā , līdz ar to normāli tiks saprasts tikai no 00 līdz 07.
Vari ar scanf sadalīt tekstu fragmentos un pēc tam atoi vai atol.

#6 valka

valka
  • Jaunbiedri
  • 17 raksti

Pievienots 24 April 2012 - 08:24

Ķēpīgi analizēt problēmas un tās niķis atstāt neapstrādātos datus buferī, ja kas nobrūk.

Protams nevar nepiekrist, ka ar `strtok()` būs sarežģītāk, bet tā ir pietiekama alternatīva ja nav/nemāk/negrib/nedrīkst izmantot laika un datuma parsēšanas funkcijas, ko piedāvā dotā vide.

P.S. Esmu `fprintf()` piekritējs. :crazy_pilot:




0 Lietotāji(s) lasa šo tēmu

0 biedri(s), 0 viesi(s), 0 anonīmi(s) lietotāji(s)