C语言格式化输入输出(关于日期)

Python011

C语言格式化输入输出(关于日期),第1张

写下这篇文章,主要是记载自己的学习心得,同时也分享给所有正在学习c语言的小白们。

关于日期的输出呢,看起来是挺简单的,但当题目要求输入比如:2019--10--01或者2019--09--10,正在学习c语言的人(包括我)就会卡在这,如何将1~9的“0”一起输出呢?

其实很简单,这里巧用“0”,既然题目说到0n(n代表1~9月或者日期),那我们肯定要用到“0”呀,那这个“0”该放哪呢,又是个问题。

但不用慌,想想我们之前的输出,就应该知道这个“0”应该这样 printf("%02d",&n), 而那个2怎么来的呢,就是代表整个宽度为2(因为月份,日期最大占两位数),即%04d表示在输出一个小于4位的数值时,将在前面补0使其总宽度为4位。

因此,在日期时应该: printf("%d %02d %02d",year,month,day)

下面直接放题:

按 yyyy/mm/dd 形式从键盘输入一个日期,按yyyy--mm--dd 形式输出该日期,其中 yyyy, mm, dd 分别表示年、月、日。

输入:

2019/10/01

输出:

2019--10--01

#include<stdio.h>

int main()

{

int year,month,day

scanf("%d/%d/%d",&year,&month,&day)

printf("%d--%02d--%02d",year,month,day)

}

没错这就可以了,这篇呢只是为了巩固做题的思路,以及给所有的小白看的。当然,还需要大佬们的指导。

源程序如下:

#include "pch.h"

#define  _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std

int main()

{

int s[2][13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31,

0,31,29,31,30,31,30,31,31,30,31,30,31, }

int year = 0

int month = 0

int day = 0

int n, i, daytemp

int flag = 0

int nyear = 0, nmonth = 0, nday = 0

printf("输入年月日\n")

scanf("%d%d%d", &year, &month, &day)

//printf("输入天数\n")

//scanf("%d",&n)

n = 1

if (year <0 || month <0 || month>12 || day <1 || n <0)

{

printf("输入数据错误\n")

return 1

}

daytemp = day + n//累加天数

if ((year % 4 == 0 &&year % 100 != 0) || year % 400 == 0)//闰年置1

flag = 1

if (day >s[flag][month])

{

printf("输入日期与年月不符.\n")

return 1

}

if (daytemp <= s[flag][month])//当前日期加天数在本月

{

nyear = year

nmonth = month

nday = daytemp

}

else

{

i = month

nyear = year;

while (daytemp >s[flag][i])//循环递减,直到当前日期加天数在本月

{

daytemp = daytemp - s[flag][i]

i++

if (i >12)//超过一年,年累加

{

nyear++

if ((nyear % 4 == 0 &&nyear % 100 != 0) || nyear % 400 == 0)

flag = 1

else

flag = 0

i = i - 12

}

}

nmonth = i

nday = daytemp

}

printf("%d年%d月%d日第%d天后是:\n", year, month, day, n)

printf("%d年%d月%d日\n", nyear, nmonth, nday)

return 0

}

程序运行结果如下:

扩展资料:

其他实现方式:

int monthsize(int year, int month) {

int days

if (month == 2) {

if (year % 4 == 0 &&year % 100 != 0 || year % 400 == 0)

return 29

return 28

}

switch (month) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:days = 31break

case 4:

case 6:

case 9:

case 11: days = 30break

}

return days

}

int main() 

int year, month, day, days

printf("年 月 日:")

while (scanf("%d%d%d", &year, &month, &day) == 3) {

days = monthsize(year, month)

if (days == day) {

if (month == 12) {

++year

month = 1

day = 1

}

else ++month

}

else ++day

printf("第二天是:%d/%02d/%02d\n", year, month, day)

printf("年 月 日(q to quit):")

}

return 0

}