Czy istniej funkcja zwracająca nazwę miesiąca w bibliotece "time.h"?

2013-11-07 18:34
0

Czy istnieje w bibliotece time.h bądź w innej funkcja zwracająca nazwę miesiąca? Nazwa, nie numer miesiąca. Przejrzałem może zbyt pobieżnie bibliotekę i nie znalazłem, lecz chcę się dowiedzieć, czy istnieje taka funkcja.


.
w jakim języku? - juniorchat 2013-11-07 18:35
time.h wskazuje na C. - Ktos 2013-11-07 18:40
W tagach jest litera 'C'. - pasasap 2013-11-07 19:22

Pozostało 580 znaków

2013-11-07 18:40
0

I pewnie jeszcze po polsku?

Napisz sobie sam - to raptem 12-elementowy switch... albo jedna tablica.

I tutaj przydałaby się opcja minusowania postów. Jakbym chciał, to bym se napisał. Ale jak mam gotowca, to po co odkrywać po raz setny Amerykę? - pasasap 2013-11-07 19:13
Szkoda, że tak wytrwale jak odpisujesz komentarze nie szukasz takich informacji w dokumentacjach; - furious programming 2013-11-07 22:19
Przekombinowałem, racja, odpluskiwacz pomógł szybciej jak 4P. Nie miałem sił szukać błędów, a w warunku while dałem sprawdzenie, czy wskaźnik jest różny od null, i po każdej iteracji zwiększałem ten wskaźnik. Porównywałem wskaźnik, nie wartość wskaźnika, dlatego był problem z pamięcią. Co do dokumentacji to przejrzałem opis funkcji z rodziny time.h na Wikibooks, lecz przeoczyłem tę informację, sprawdzałem zbyt pobieżnie. Dlatego się spytałem, czy istnieje taka funkcja. - pasasap 2013-11-08 20:19

Pozostało 580 znaków

2013-11-07 18:52
1

http://www.cplusplus.com/reference/ctime/strftime/
*`%B Full month name August`**

#include <stdio.h>
#include <time.h>

int main()
  {
   char buf[100];
   struct tm T;
   int m;
   for(m=1;m<=12;++m)
     {
      T.tm_mday=1;
      T.tm_mon=m-1;
      T.tm_year=0;
      strftime(buf,sizeof(buf),"%B",&T);
      printf("%s\n",buf);
     }
   return 0;
  }

http://ideone.com/ZzG93u


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2013-11-07 18:52

Pozostało 580 znaków

2013-11-07 19:11
0

Nie mam sił, scanf("%s", miesiac); wariuje, coś źle napisałem? Uruchamiając w konsoli wpisuję dane, wciskam enter, nic, dalej mogę wprowadzać dane. Przecież powinna pobrać do pierwszego białego znaku. A jak by pobrała nawet nieprawidłowe to by się źle powypisywało.

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void wyswietl(int, int, char *);
void wyswietl_m(int);
int dni(int);
int mies(char *);
void duze(char *);

int main(void)
{
    int dzien, miesiac_i;
    char miesiac[5];

    puts("Podaj numer miesiaca oraz numer dnia tygodnia w pierwszym dniu tego miesiaca");
    scanf("%s", miesiac);
    scanf("%d", &dzien);
    miesiac_i = mies(miesiac);
    if(miesiac_i == 0)
    {
        puts("Niepoprawny miesiac");
        return 0;
    }
    wyswietl(miesiac_i, dzien,  miesiac);
    return 0;
}

int dni(int miesiac)
{
    switch(miesiac)
    {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12: return 31;
        case 2: return 28;
        default: return 30;
    }
}

void wyswietl(int m, int d, char * ll)
{
    int licznik;
    int tydzien = 1;
    int dni_miesiaca = dni(m);

    printf("Miesiac %s\n", ll);
    wyswietl_m(m);
    putchar('\n');
    printf("|Ni |Po |Wt |Sr |Cz |Pt |So |\n|");
    if(d > 0)
        for(tydzien = 1; tydzien <= d; tydzien++)
        {
            printf("   |");
            if(tydzien % 7 == 0)
                printf("\n|");
        }
    for(licznik = 1; licznik <= dni_miesiaca; licznik++, tydzien++)
    {
        printf("%2d |", licznik);
        if(tydzien % 7 == 0)
            {
                printf("\n");
                if(licznik != dni_miesiaca)
                    putchar('|');
            }
    }
    if(tydzien-- % 7 != 0 || tydzien % 7 == 6)
        while(tydzien++ % 7 != 0)
            printf("   |");
    putchar('\n');
}

int mies(char * lan)
{
    static tab[12][5] = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"};
    int n = 0;
    duze(lan);

    while(n < 12)
        if(strcpy(lan, tab[n]) == 0)
            return n;
    return 0;
}

void duze(char * lan)
{
    while(lan)
        toupper(*(lan++));
}

void wyswietl_m(int i)
{
    static char tab[12][20] = {"Styczen", "Luty", "Marzec", "Kwiecien", "Maj", "Czerwiec", "Lipiec", "Sierpien", "Wrzesien", "Pazdziernik", "Listopad", "Grudzien"};
    printf("%s", tab[i-1]);
}

.

Pozostało 580 znaków

2013-11-07 19:22

Sprawdzić oczywiście nie jesteś w stanie: http://ideone.com/p53qYr koniecznie trza post nasmarować, na pisanie którego oczywiście straciłeś więcej czasu niż na dodanie sprawdzającego printf, bądź na odpalenie debugera.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Ideone normalnie kompiluje, a u mnie pojawia się problem: Naruszenie ochrony pamięci (core dumped). Następuje po pobraniu danych w funkcji main. Kompilując i uruchamiając w CB czy w terminalu, choć bez znaczenia, bo ten sam kompilator, pojawia się ten problem. - pasasap 2013-11-07 20:15
A kto nie pozwala debugera odpalić? - _13th_Dragon 2013-11-07 20:24

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0