c - 当我写信时,它会打印出我的分段错误(核心转储)和很多次
问题描述
很抱歉打扰你,我知道这里有很多类似的问题,但我真的不明白,我是这门语言的新手,谢谢你的理解,再次抱歉。这是我的代码:
#include <stdio.h>
int main()
{
int year , month;
printf("Which year? : ");
scanf("%i",&year);
if ( year < 0 )
{
printf("Wrong input for year , try again !\n");
return main();
}
printf("Whcih month? : (1-12) ");
scanf("%i",&month);
if ( month < 1 || month > 12 )
{
printf("Wrong input for month , try again !\n");
return main();
}
if ( month == 1 )
{
printf("In January 31 days\n");
}
else if ( month == 2 )
{
if (((year % 4 == 0) && (year % 100 != 0 )) || (year % 400 == 0))
{
printf("In February 29 days ( this year is leap )\n");
}
else
{
printf("In February 28 days ( common year )\n");
}
}
else if ( month == 3 )
{
printf("In March 31 days\n");
}
else if ( month == 4 )
{
printf("In April 30 days\n");
}
else if ( month == 5 )
{
printf("In May 31 days\n");
}
else if ( month == 6 )
{
printf("In June 30 days\n");
}
else if ( month == 7 )
{
printf("In July 31 days\n");
}
else if ( month == 8 )
{
printf("In August 31 days\n");
}
else if ( month == 9 )
{
printf("In September 30 days\n");
}
else if ( month == 10 )
{
printf("In October 31 days\n");
}
else if ( month == 11 )
{
printf("In November 30 days\n");
}
else if ( month == 12 )
{
printf("In December 31 days\n");
}
}
当我输入要编程的字母时返回 main 。但它打印了很多次“哪一年?:哪个月?:(1-12)月份输入错误,再试一次!” 和“分段错误(核心转储)”为什么?
解决方案
当用户输入错误时,尝试使用循环重复并再次请求一个值。您可以使用“do-while”循环,在用户提交错误时询问输入。试试下面的代码,它检查月份和年份的输入,如果有一个字母或一个错误的数字:
#include <stdio.h>
int main()
{
int year , month, res;
//checks years
printf("Which year? : ");
do {
res = scanf("%d", &year);
if (res != 1) {
printf("Error reading number, try again:\n");
while (getchar() != '\n') {
continue;
}
continue;
} else {
break;
}
}while (1);
if (year < 0){
do{
printf("Year must be positive, Try again: ");
do{
res = scanf("%d", &year);
if (res != 1) {
printf("Error reading number, try again:\n");
while (getchar() != '\n') {
continue;
}
continue;
} else {
break;
}
}while(1);
}while(year < 0);
}
printf("Which month? : (1-12) ");
//checks months
do {
res = scanf("%d", &month);
if (res != 1) {
printf("Error reading number, try again:\n");
while (getchar() != '\n') {
continue;
}
continue;
} else {
break;
}
}while (1);
if (month < 1 || month > 12){
do{
printf("Year must be positive, Try again: ");
do{
res = scanf("%d", &month);
if (res != 1) {
printf("Error reading number, try again:\n");
while (getchar() != '\n') {
continue;
}
continue;
} else {
break;
}
}while(1);
}while(month < 1 || month > 12);
}
if ( month == 1 )
{
printf("In January 31 days\n");
}
else if ( month == 2 )
{
if (((year % 4 == 0) && (year % 100 != 0 )) || (year % 400 == 0))
{
printf("In February 29 days ( this year is leap )\n");
}
else
{
printf("In February 28 days ( common year )\n");
}
}
else if ( month == 3 )
{
printf("In March 31 days\n");
}
else if ( month == 4 )
{
printf("In April 30 days\n");
}
else if ( month == 5 )
{
printf("In May 31 days\n");
}
else if ( month == 6 )
{
printf("In June 30 days\n");
}
else if ( month == 7 )
{
printf("In July 31 days\n");
}
else if ( month == 8 )
{
printf("In August 31 days\n");
}
else if ( month == 9 )
{
printf("In September 30 days\n");
}
else if ( month == 10 )
{
printf("In October 31 days\n");
}
else if ( month == 11 )
{
printf("In November 30 days\n");
}
else if ( month == 12 )
{
printf("In December 31 days\n");
}
return 0;
}
推荐阅读
- javascript - JSDocs 当前未启用对实验性语法“jsx”的支持
- c# - 无法将 DataGridViewComboBoxColumn 中的值设置为绑定的 DataGridView
- excel - 如何根据excel中的特定条件向上和向下舍入数字?
- powerbi - POWER BI:我希望 DAX 公式在我的主表中找出组的第一个最高值和第二个最高值
- arrays - 求范围 [l:r] 中数字重复的频率 (r-l+1)/2 次
- javascript - 我只想对这部分代码 ${a}\_${b} 使用 repeat(4) 并从重复中排除下划线以在评论中获得答案
- reactjs - 未出现在 WebStorm 中的 React Tailwind CSS 应用程序上的类的自动完成
- callback - 无法捕获 MQTT 日志回调
- django - 在 pandas 数据框行 pandas() 中动态访问值
- python - 我正在尝试使用 python 脚本将文件写入我的公司共享点,但我无法让它工作