Си: вывести номер дня недели по его названию
В единственной строке файла записано три буквы, обозначающие день недели на английском языке. Требуется вывести номер этого дня недели. В файле нет пробелов. Первая буква заглавная, остальные две маленькие. Гарантируется, что с трёх записанных букв начинается название дня недели на английском языке. Вот мой собственный код, программа ничего не выводит. Что бы вы посоветовали сделать/исправить?
#include<stdio.h>
int main(){
char c, d, e;
scanf("%d %d %d", &c, &d, &e);
if((c=='M')&&(d=='o')&&(e=='n'))
printf("1");
if((c=='T')&&(d=='u')&&(e=='e'))
printf("2");
if((c=='W')&&(d=='e')&&(e=='d'))
printf("3");
if((c=='T')&&(d=='h')&&(e=='u'))
printf("4");
if((c=='F')&&(d=='r')&&(e=='i'))
printf("5");
if((c=='S')&&(d=='a')&&(e=='t'))
printf("6");
if((c=='S')&&(d=='u')&&(e=='n'))
printf("7");
}
Ответы (4 шт):
Попробуйте так: (как отметил wololo в комментарии, нужно просто поменять формат принимаемых данных) ну и от себя добавил проверку.
#include <stdio.h>
int main(){
char c, d, e;
scanf("%c %c %c", &c, &d, &e);
if((c=='M')&&(d=='o')&&(e=='n'))
printf("1\n");
else if((c=='T')&&(d=='u')&&(e=='e'))
printf("2\n");
else if((c=='W')&&(d=='e')&&(e=='d'))
printf("3\n");
else if((c=='T')&&(d=='h')&&(e=='u'))
printf("4\n");
else if((c=='F')&&(d=='r')&&(e=='i'))
printf("5\n");
else if((c=='S')&&(d=='a')&&(e=='t'))
printf("6\n");
else if((c=='S')&&(d=='u')&&(e=='n'))
printf("7\n");
else
printf("day not found\n");
}
И ещё момент, на западе в основном воскресенье это не 7й день недели, а первый)
#include<stdio.h>
int main(){
char str[4];
scanf("%s", str);
if ((str[0] == 'M') && (str[1] == 'o') && (str[2] == 'n'))
printf("1");
if ((str[0] == 'T') && (str[1] == 'u') && (str[2] == 'e'))
printf("2");
if((str[0] =='W') && (str[1] == 'e') && (str[2] == 'd'))
printf("3");
if((str[0] =='T') && (str[1] == 'h') && (str[2] == 'u'))
printf("4");
if((str[0] =='F') && (str[1] == 'r') && (str[2] == 'i'))
printf("5");
if((str[0] =='S') && (str[1] == 'a') && (str[2] == 't'))
printf("6");
if((str[0] =='S') && (str[1] =='u') && (str[2] =='n'))
printf("7");
}
Ну раз уж
Гарантируется, что с трёх записанных букв начинается название дня недели на английском языке
грех этим не попользоваться...
int day()
{
char nm[10];
scanf("%s",nm);
long long x = nm[0]+nm[1]+nm[2]-300;
return (((((101047ll*x+694384ll)*x-19207693ll)*x-61935874ll)*x
+1060034136ll)*x-1218412800)*(2+x)/2058376320+1;
}
Убедитесь, что работает...
:)
Поскольку задача, вообще-то, связана с анализом строк символов, то и решать ее наиболее логично, используя средства работы со строками, которые для Си в основном находятся в заголовочном файле string.h.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main (int ac, char *av[])
{
char str[10];
if (!fgets(str, sizeof(str), stdin)) // прочтем строку файла
return (perror("get line"), 1);
str[3] = 0; // ограничимся первыми 3-мя символами
const char *days = "MonTueWedThuFriSatSun";
const char *p = strstr(days, str); // найдем вхождение прочитанного дня в перечне всех дней недели
int n = p - days; // перейдем от адресов к индексу символов в строке
if (p && n % 3 == 0) // проверим, введенные данные это в самом деле первые 3 буквы дня?
printf("%d\n", n / 3 + 1);
else
printf("`%s` is not a day\n", str);
return puts("End") == EOF;
}