Nevyhodnocení konstant u switch

Marcel Borna

Nevyhodnocení konstant u switch
« kdy: 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.
« Poslední změna: 03. 02. 2011, 12:39:24 od Petr Krčmář »


aaa

Re: Nevyhodnocení konstant u switch
« Odpověď #1 kdy: 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 ;-)

aaa

Re: Nevyhodnocení konstant u switch
« Odpověď #2 kdy: 03. 02. 2011, 13:13:06 »
samozrejme pre bash treba dat
Kód: [Vybrat]
DIRECTORY="c:\\Documents and ...\\t${TYZDEN}";
(medzery vyssie su nespravne)

j.

Re: Nevyhodnocení konstant u switch
« Odpověď #3 kdy: 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;


Re: Nevyhodnocení konstant u switch
« Odpověď #4 kdy: 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.


Marcel Borna

Re: Nevyhodnocení konstant u switch
« Odpověď #5 kdy: 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.

j.

Re: Nevyhodnocení konstant u switch
« Odpověď #6 kdy: 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 ;)

Re: Nevyhodnocení konstant u switch
« Odpověď #7 kdy: 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)

Marcel Borna

Re: Nevyhodnocení konstant u switch
« Odpověď #8 kdy: 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.

j.

Re: Nevyhodnocení konstant u switch
« Odpověď #9 kdy: 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).

Marcel Borna

Re: Nevyhodnocení konstant u switch
« Odpověď #10 kdy: 03. 02. 2011, 14:46:41 »
Koukám, že to fakt není jednoduché.

M.