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
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;
}
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.