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
相关产品推荐
相关产品推荐

