Моя программа не возвращает значение месяцев

#c #if-statement #variables #compiler-warnings #question-answering

Вопрос:

Что я должен использовать для хранения месяцев в качестве переменной? Когда я запускаю код, он говорит: «константа предупреждающего символа слишком длинная для своего типа».

Я создал программу, чтобы проверить, сколько дней в данном месяце, поэтому я беру значение у пользователя и помещаю его в m . Я также пытался использовать значение m as (символ), но это не работает. Я проверяю, идет ли месяц февраль или другой месяц. Если это февраль, то он попросит ввести год, y , а если это не февраль, то он будет соответствовать значению m во всех условиях и выведет месяц, m .

 #include<iostream>
    using namespace std;
    int main(){
    char m;
    int y;
    cout<<"Plase Enter The month:- ";
    cin>>m;
    if (m=='january'||m=='march'||m=='april'||m=='may'||m=='june'||m=='july'||m=='august'||m=='september'||m=='december'||m=='october'||m=='november'||m=='jan'||m=='mar'||m=='apr'||m=='may'||m=='jun'||m=='jul'||m=='aug'||m=='sep'||m=='dec'||m=='oct'||m=='nov'||m=='JANUARY'||m=='MARCH'||m=='APRIL'||m=='MAY'||m=='JUNE'||m=='JULY'||m=='AUGUST'||m=='SEPTEMBER'||m=='OCTOBER'||m=='NOVEMBER'||m=='DECEMBER')
    {
        if (m=='jan'||m=='january'||m=='JANUARY')
        {
            cout<<"There Are 31";
        }
        else if (m=='march'||m=='mar'||m=='MARCH')
        {
            cout<<"There Are 31";
        }
        else if (m=='apr'||m=='april'||m=='APRIL')
        {
            cout<<"There Are 30";
        }
        else if (m=='may'||m=='MAY')
        {
            cout<<"There Are 31";
        }
        else if (m=='june'||m=='jun'||m=='JUNE')
        {
            cout<<"There Are 30";
        }
        else if (m=='jul'||m=='july'||m=='JULY')
        {
            cout<<"There Are 31";
        }
        else if (m=='aug'||m=='august'||m=='AUGUST')
        {
            cout<<"There Are 31";
        }
        else if (m=='sep'||m=='september'||m=='SEPTEMBER')
        {
            cout<<"There Are 30";
        }
        else if (m=='oct'||m=='october'||m=='OCTOBER')
        {
            cout<<"There Are 31";
        }
        else if (m=='nov'||m=='november'||m=='NOVEMBER')
        {
            cout<<"There Are 30";
        }
        else if (m=='dec'||m=='december'||m=='december')
        {
            cout<<"There Are 31";
        }
    }
    else if(m=='feburary'||m=='feb'||m=='FEBURARY'){
        cout<<"You Entered ";
        cout<<m;
        cout<<" which have more days in Leap year's ";
        cout<<"So Please Enter The year:- ";
        
        cin>>y;
        if (y>=1752)
    {
        
    if ((y-1752)%4==0)
    {
        cout<<"There are 29 days";
    }
    else if((y-1752)%4!=0){
        cout<<"There is 28 days";
    }}
    else{
        cout<<"The First leap is started from 1752 so Please enter Number Greater than it";
    }
    
    }
   else cout<<"------------------Please Enter A valid Month or Check Your Spelling--------------------";
        return 0;
    }
 

Комментарии:

1. использовать строки, строки и символ-это две разные вещи

Ответ №1:

Попробуйте это:

 #include<iostream>
#include <string>
using namespace std;

int main() {
    std::string m;
    int y;
    cout << "Plase Enter The month:- ";
    cin >> m;
    if (m == "january" || m == "march" || m == "april" || m == "may" || m == "june" || m == "july" || m == "august" || m == "september" || m == "december" || m == "october" || m == "november" || m == "jan" || m == "mar" || m == "apr" || m == "may" || m == "jun" || m == "jul" || m == "aug" || m == "sep" || m == "dec" || m == "oct" || m == "nov" || m == "JANUARY" || m == "MARCH" || m == "APRIL" || m == "MAY" || m == "JUNE" || m == "JULY" || m == "AUGUST" || m == "SEPTEMBER" || m == "OCTOBER" || m == "NOVEMBER" || m == "DECEMBER")
    {
        if (m == "jan" || m == "january" || m == "JANUARY")
        {
            cout << "There Are 31";
        }
        else if (m == "march" || m == "mar" || m == "MARCH")
        {
            cout << "There Are 31";
        }
        else if (m == "apr" || m == "april" || m == "APRIL")
        {
            cout << "There Are 30";
        }
        else if (m == "may" || m == "MAY")
        {
            cout << "There Are 31";
        }
        else if (m == "june" || m == "jun" || m == "JUNE")
        {
            cout << "There Are 30";
        }
        else if (m == "jul" || m == "july" || m == "JULY")
        {
            cout << "There Are 31";
        }
        else if (m == "aug" || m == "august" || m == "AUGUST")
        {
            cout << "There Are 31";
        }
        else if (m == "sep" || m == "september" || m == "SEPTEMBER")
        {
            cout << "There Are 30";
        }
        else if (m == "oct" || m == "october" || m == "OCTOBER")
        {
            cout << "There Are 31";
        }
        else if (m == "nov" || m == "november" || m == "NOVEMBER")
        {
            cout << "There Are 30";
        }
        else if (m == "dec" || m == "december" || m == "december")
        {
            cout << "There Are 31";
        }
    }
    else if (m == "feburary" || m == "feb" || m == "FEBURARY") {
        cout << "You Entered ";
        cout << m;
        cout << " which have more days in Leap year"s ";
            cout << "So Please Enter The year:- ";

        cin >> y;
        if (y >= 1752)
        {

            if ((y - 1752) % 4 == 0)
            {
                cout << "There are 29 days";
            }
            else if ((y - 1752) % 4 != 0) {
                cout << "There is 28 days";
            }
        }
        else {
            cout << "The First leap is started from 1752 so Please enter Number Greater than it";
        }

    }
    else cout << "------------------Please Enter A valid Month or Check Your Spelling--------------------";
    return 0;
}
 

В c одинарная кавычка ' может использоваться, например, только для символов 'e' , но не для строк, например 'hello' . Для строк вы используете двойные кавычки, вот так " .

Вы также должны использовать std::string s, если хотите сравнить входные данные с чем-то другим.

Ответ №2:

  1. Вы объявили m как символ и используете его как строку.
  2. Вы используете '' для обозначения строк, но это "" то, что вы должны использовать.
 @@ -1,70  1,35 @@
 #include<iostream>
 #include<string>
 
 using namespace std;
 
 int main()
 {
-    char m;
     string m;
     int y;
     cout<<"Plase Enter The month:- ";
     cin>>m;
-    if (m=='january'||m=='march' ...
     if (m=="january"||m=="march" ...
     {
-        if (m=='jan'||m=='january'||m=='JANUARY')
         if (m=="jan"||m=="january"||m=="JANUARY")
         {
             cout<<"There Are 31";
         }

 

Комментарии:

1. Это результат работы программы, diff которую можно использовать patch для получения исходного кода обновления, связанного с: https://opensource.com/article/18/8/diffs-patches

2. Я сделал это, чтобы показать, что нужно изменить, чтобы это сработало, и в ответе сказано, почему.

3. Нет проблем, я просто хотел объяснить людям, которые никогда не видели этот тип вывода.

4. Тесты всегда будут проваливаться. Кроме того, я почти уверен, что это не будет компилироваться, так как для символов и символов const не существует оператора==.

5. если кто-то сделает правильный синтаксис, он скомпилируется, и тесты не всегда будут завершаться неудачно. С тех пор работа ОП состоит в том, чтобы что-то сделать со своей программой. Мы помогли ему указать на его ошибки, теперь его работа — учиться на них.

Ответ №3:

На самом деле m это персонаж. Размер символа составляет 1 байт. Это означает, что вы можете назначить char m = 'q'; , но вы не можете сказать char m = 'qq'; Здесь, что вам нужно использовать массив символов, т. Е., char m[] = "qq";

Комментарии:

1. лучше использовать std::строку