C语言编程一个关于闰年平年的问题,经过测试,想用CTRL+Z结束程序,输出闰年,相反输入EOF的值-1退出,不解

#include<stdio.h>
int get_year(int a);
void TO_DIVIDE(int a);
main()
{
int a=0;
GET:a=get_year(a);
if(a==EOF)
goto EXIT;
TO_DIVIDE(a);
printf("thanks for your try,Bye!\n");
goto GET;
EXIT: return 0;
}
int get_year(int a)
{
printf("please enter a number of year,%\"ctrl+z%\"to quit.\n");
AGAIN:while(scanf("%d",&a))
goto TOGET;
while((a=getchar())!='\n'){
if(a==EOF)goto TOGET;
continue;}
printf("DON'T kid me,to enter a number!sir\n");
goto AGAIN;
TOGET:return a;
}
void TO_DIVIDE(a)
{
if(a%4==0&&a%100!=0||a%400==0)
printf("闰年\n");
else
printf("平年\n");
}

void TO_DIVIDE(a)
{
if(a%4==0&&a%100!=0||a%400==0)
printf("闰年\n");
else
printf("平年\n");
}
这里函数参数应该是int a吧?不然调试的时候会有错误的。。。
你出现这个问题的原因其实很简单,
int get_year(int a)
{
printf("please enter a number of year,%\"ctrl+z%\"to quit.\n");
AGAIN:while(scanf("%d",&a))
goto TOGET;
while((a=getchar())!='\n'){
if(a==EOF)goto TOGET;
continue;}
printf("DON'T kid me,to enter a number!sir\n");
goto AGAIN;
TOGET:return a;
}
这里面两个AGAIN后面的while的顺序放反了。。。
按照你这样的放,输入ctrl+z的时候先经过的处理是第一个while(处理int),这个时候会给a一个整形值,你打断点可以看到a的值是0,所以是闰年,如果你先用第二个while(处理char),那么a就会得到-1,就是你想要的结果。
但是,将两个while顺序换了之后,这个时候问题又来了,当你输入整数的时候,又会先经过while(处理char),所以会让你再输入一遍整数才能往下执行,所以两个while的关系你要好好梳理下,最终程序具体怎样写,你可以自己再调试调试,就不给你全部写出来了
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-16
好多 goto..... 问题没说完啊追问

嗯,,不大明白为何这个程序输入CTRL+Z的时候 结果是闰年,按理来说 应该退出

追答

是输出 -1 退出吧 你用ctrl+z 强制退出的话... 可能被当成z z的ascii值 转换成年了

C语言编程一个关于闰年平年的问题
使用`getchar`读取输入的字符,直到读取到空格或输入结束符`Ctrl Z`。 根据输入的字符值判断是否重新提示用户输入。为了确保程序的正确性,在编写代码时需要关注输入输出的逻辑顺序以及错误处理的合理性。对于上述代码,关键在于正确处理输入结束符`Ctrl Z`,避免其影响到整数的读取。通过调整`get_year`函...

一道C语言 关于闰年的题
include <stdio.h> main(){ int y,m,leap;scanf("%d%d",&y,&m);leap=(y%4==0 && y%100!=0)||(y%400==0);printf(leap?"Leap year,":"Common year,");if(m\/3==1)printf("Spring,");else if(m\/3==2)printf("Summer,");else if(m\/3==3)printf("Fall,");else prin...

如何在c语言编程中使用闰年?
思路:可以使用switch语句来完成该编程,具体的编程内容代码如下:include < <stdio.h> main({ printf("Input year,month: ");scanf("%d, %d", &year, &month);\/*输入相应的年和月*\/ switch (month){ case 1:case 2:if(vyear % 4== 0 && year % 100 != O)l(year % 400 == 0...

C语言设计函数判断是否是闰年,是闰年返回1,平年返回0,主函数输入年份测 ...
=0 || year%400 == 0) \/\/判断是否是闰年 return 1; else return 0;}int main(){ printf("请输入测试的年份:\\n"); int year; scanf("%d",&year); printf("%d\\n",isLeapYear(year)); return 0;} 运行的结果如下图所示:...

用C语言编程序 写一个函数,判断输入年份是否为闰年,并编写主函数...
{if((year%4==0&&year%100!=0)||year%400==0)return 1;elsereturn 0;}main(){ int t; printf("输入年份为"); scanf("%d",&t); t=is(t); if(t=1) printf("%d是闰年",t); else printf("%d不是闰年",t);}输入年份为20161是闰年Press any key to continue ...

编写一个函数用于判断指定年份是否为闰年,要求在主函数中输入一个公元...
c语言脚本如下:include using namespace std;bool isLeapYear(int year){ if((0==year%4)&&(0!=year%100)){ return true;} if(0==year%400){ return true;} return 0;} int main(){ int year;bool flag;cout<<"--判断闰年--"<<endl;cout<<"请输入一个年份[输入负数退出程序]:"...

用C语言编写一个完整的程序,通过键盘输入一个年号,判断是否为闰年
1. 编写C语言程序需要包含头文件`stdio.h`,这是标准输入输出库的头文件。2. 在`main`函数中,使用`scanf`函数从键盘接收一个整数,该整数代表年号。3. 通过`if`语句判断年号是否为闰年。一个年份是闰年的条件是:能被4整除但不能被100整除,或者能被400整除。4. 根据判断结果,使用`printf`函数...

C语言-判断闰年 要用switch语句 请教高人
ex=1;printf("%d年为闰年。\\n",year);}else{ ex=0;printf("%d年不为闰年。\\n",year);} switch(month){ case4:case6:case9:case11:printf("%d月有%d天。\\n",month,30);break;case2:printf("%d月有%d天。\\n",month,28+ex);break;default:printf("%d月有%d天。\\n",month,31);...

c语言判断一年是不是闰年,编程错在哪呢?
if(a=1)printf("闰年");else printf("非闰年");判断的表达式错。。。a=1永远为真 应该是a==1 等于关系要用两个等号(在写逻辑等时可以把常量放在前面 ,这样一不小心把逻辑等写成赋值也会发现)

C语言编程 从键盘输入一个年份和月份,输出该月有多少天(考虑闰年)
=0||y%400==0) \/\/最基本的判断闰年的条件 printf("这个月有29天\\n");else printf("这个月有28天\\n");break;case 4:case 6:case 9 :case 11:printf("这个月有30天\\n");break;}return 0;}用指针型列举的:#include<stdio.h>int a[]={31,28,31,30,31,30,31,31,30,31,30,...

相似回答
大家正在搜