Си: вывести номер дня недели по его названию

В единственной строке файла записано три буквы, обозначающие день недели на английском языке. Требуется вывести номер этого дня недели. В файле нет пробелов. Первая буква заглавная, остальные две маленькие. Гарантируется, что с трёх записанных букв начинается название дня недели на английском языке. Вот мой собственный код, программа ничего не выводит. Что бы вы посоветовали сделать/исправить?

#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 шт):

Автор решения: noname2019

Попробуйте так: (как отметил 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й день недели, а первый)

→ Ссылка
Автор решения: Danis
#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");
}
→ Ссылка
Автор решения: Harry

Ну раз уж

Гарантируется, что с трёх записанных букв начинается название дня недели на английском языке

грех этим не попользоваться...

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;

}

Убедитесь, что работает...

:)

→ Ссылка
Автор решения: avp

Поскольку задача, вообще-то, связана с анализом строк символов, то и решать ее наиболее логично, используя средства работы со строками, которые для Си в основном находятся в заголовочном файле 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;
}
→ Ссылка