You need to enable JavaScript to run this app. C++月份天数计算程序报字符常量过长警告且无法正常返回结果
优惠活动
大模型
产品
解决方案
定价
更多

C++月份天数计算程序报字符常量过长警告且无法正常返回结果

问题原因与解决方案

1. 警告与运行异常的核心原因

你遇到的问题完全来源于变量类型选择和语法使用错误:

  • char类型仅能存储单个ASCII字符,完全无法承载january这类由多个字符组成的月份输入内容
  • C/C++语法规定:单引号'仅用于包裹单个字符常量,多字符组成的字符串必须用双引号"包裹,你用单引号包裹长文本触发了编译器警告

2. 正确的变量类型选择

直接使用C++标准库提供的std::string类型存储月份输入即可,该类型原生支持==运算符做字符串相等判断,无需额外调用函数。

3. 其他需要修正的代码问题

  • 闰年判断逻辑错误:现行格里高利历闰年规则为能被4整除但不能被100整除,或能被400整除的年份为闰年,你当前的(y-1752)%4==0逻辑会误判1800、1900这类整百年份为闰年
  • 拼写错误:二月的正确英文拼写是february,你代码中写的feburary会导致输入正确也匹配失败
  • 输入读取逻辑错误:原代码中cin >> m如果用char类型只能读取输入的第一个字符,改用string类型后会自动读取空格前的完整输入单词

4. 修正后的参考代码

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

int main() {
    string m;
    int y;
    cout << "Please Enter The month:- ";
    cin >> m;
    if (m == "january" || m == "march" || m == "april" || m == "may" || m == "june" || m == "july" || m == "august" || m == "september" || m == "october" || m == "november" || m == "december" || 
        m == "jan" || m == "mar" || m == "apr" || m == "jun" || m == "jul" || m == "aug" || m == "sep" || m == "oct" || m == "nov" || m == "dec" ||
        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" || m == "mar" || m == "march" || m == "MARCH" || m == "may" || m == "MAY" || m == "jul" || m == "july" || m == "JULY" || m == "aug" || m == "august" || m == "AUGUST" || m == "oct" || m == "october" || m == "OCTOBER" || m == "dec" || m == "december" || m == "DECEMBER") {
            cout << "There Are 31 days";
        } else {
            cout << "There Are 30 days";
        }
    } else if(m == "february" || m == "feb" || m == "FEBRUARY") {
        cout << "You Entered " << m << " which has more days in Leap year" << endl;
        cout << "So Please Enter The year:- ";
        cin >> y;
        if (y >= 1752) {
            // 正确的闰年判断逻辑
            if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
                cout << "There are 29 days";
            } else {
                cout << "There are 28 days";
            }
        } else {
            cout << "The First leap year in Gregorian calendar started from 1752, please enter a year greater than 1752";
        }
    } else {
        cout << "------------------Please Enter A valid Month or Check Your Spelling--------------------";
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者PANKAJ UPRETI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 19:24:03