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

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.

0

I pewnie jeszcze po polsku?

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

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

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]);
}

 
1

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.

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