Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Marcel Borna 03. 02. 2011, 12:26:31

Název: Nevyhodnocení konstant u switch
Přispěvatel: Marcel Borna 03. 02. 2011, 12:26:31
Dobrý den,
zkoušel jsem tento kód:

#include <time.h>
#include<direct.h>
#include<dir.h>

int main (void)
{
  time_t rawtime;
  struct tm * numberofweek;
  char buffer [80],j;
  int i;

  time ( &rawtime );
  numberofweek = localtime ( &rawtime );

  strftime (buffer,80,"Now it's %U:.",numberofweek);
  puts (buffer);
 
  i=(int)numberofweek;

  switch(i)
  {
case 1:mkdir("C:/Documents and Settings/doid/Plocha/t1");
break;
case 2:mkdir("C:/Documents and Settings/doid/Plocha/t2");
break;
case 3:mkdir("C:/Documents and Settings/doid/Plocha/t3");
break;

default:mkdir("C:/Documents and Settings/doid/Plocha/t54");
break;
}
  return 0;
}


Pokoušel jsem se přetypovat timeinfo tak, aby mi šel switch, ale ten nevyhodnotí žádnou z nabízených konstant a přejde proto rovnou k defaultní hodnotě.Chtěl bych poprosit o vysvětlení, proč se to děje a poradit způsob,jak to napravit.Myslel jsem si, že číslo týdne bude v přetypovaném i, ale asi není.Nevím, jestli jsem správně pochopil způsob přetypování.
Chci se jen pokusit při změně čísla týdne vytvořit prázdnou složku pojmenovanou číslem týdne.

Moc díky za pomoc.

M.
Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: aaa 03. 02. 2011, 13:11:20
nebolo by to jednoduchsie takto?
kod a la bash:

Kód: [Vybrat]
TYZDEN=cislo_tyzdna;

DIRECTORY = "c:\\Documents and ...\\t${TYZDEN}";
if [[ ! -d "$DIRECTORY" ]]; then mkdir -p "$DIRECTORY"; fi

To by mohlo fungovat pod cygwin-om, a tipujem ze v C tiez nebude problem to nakodit :-) Samozrejme predpokladam ze funkcia cislo_tyzdna() mi vrati cislo tyzdna ;-)
Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: aaa 03. 02. 2011, 13:13:06
samozrejme pre bash treba dat
Kód: [Vybrat]
DIRECTORY="c:\\Documents and ...\\t${TYZDEN}";
(medzery vyssie su nespravne)
Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: j. 03. 02. 2011, 13:37:36
Nevim presne, co chcete docilit, ale pretypovavani ukazatele na int ta spravna cesta asi nebude ;)
Kód: [Vybrat]

  struct tm * numberofweek;
  ...
  i=(int)numberofweek;

Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: Zdeno Sekerák 03. 02. 2011, 13:43:59
Pozri sa nato cez debuger ako ta hodnota vypada. Urcite pochopis kde je problem.
PS: Takto by to spavilo 90% ludi co ti budu radit.
Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: Marcel Borna 03. 02. 2011, 13:53:53
Díky všem. Můžeš mě nějak nasměrovat na to, jak se mám na tu hodnotu přes debuger podívat?

M.
Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: j. 03. 02. 2011, 13:55:12
Pozri sa nato cez debuger ako ta hodnota vypada. Urcite pochopis kde je problem.
PS: Takto by to spavilo 90% ludi co ti budu radit.

Debugger je v tomto pripade kanon na vrabce, tady staci obycejna PV (KV) metoda ;)
Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: hawran diskuse 03. 02. 2011, 13:58:06
Nevim presne, co chcete docilit, ale pretypovavani ukazatele na int ta spravna cesta asi nebude ;)
Kód: [Vybrat]

  struct tm * numberofweek;
  ...
  i=(int)numberofweek;


Přesně tak.
Asi bys měl v tom switchi použít prvek tm_wday, takže nějak takto:
Kód: [Vybrat]
switch (numberofweek->tm_wday)
Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: Marcel Borna 03. 02. 2011, 14:16:01
Co je PV (KV) metoda?
Jinak, zkouším to switch (numberofweek->tm_wday),krokoval jsem to, všechno ok, ale nevytvoří se mi složka.M.
Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: j. 03. 02. 2011, 14:24:36
Co je PV (KV) metoda?
Jinak, zkouším to switch (numberofweek->tm_wday),krokoval jsem to, všechno ok, ale nevytvoří se mi složka.M.

Pozriem-vidim metoda (kouknu-vidim) ;)

Nevytvori se slozka nahodou proto, ze je ctvrtek, a hodnoty jdou jenom do tri? Cislo tydne v roku v tm strukture neni, je potreba si ho spocitat, a to zalezi i od metody (treba outlook pouziva jinou metodu nez ISO 8601).
Název: Re: Nevyhodnocení konstant u switch
Přispěvatel: Marcel Borna 03. 02. 2011, 14:46:41
Koukám, že to fakt není jednoduché.

M.