自从参加档案管理工作以来,小李发现很多有趣的事情,比如某领导签字时,小李就发现一些有趣的规律,如某领导签字办理的事情,结果不了了之的,大都是签字时有0的,如“2019.02.03”或“2019.11.09”等字样,如果正常处理的,则必然不带0,如“2019.2.3”或“2019.11.9”。遵循档案管理工作必须与实际相一致的原则,请为小李开发一套C语言转换程序,用字符数组的形式输入,并保留这一习惯。要求输出“2019年02月03日”或“2019年 2月 3日”字样,并换行。用C语言编码
时间: 2023-11-24 07:05:13 浏览: 40
以下是一个简单的 C 语言程序,实现了小李的需求:
```c
#include <stdio.h>
#include <string.h>
int main() {
char date[11];
printf("请输入日期(格式:yyyy.mm.dd):");
scanf("%s", date);
int year, month, day;
sscanf(date, "%d.%d.%d", &year, &month, &day);
char monthStr[3];
if (month < 10) {
sprintf(monthStr, " %d", month);
} else {
sprintf(monthStr, "%d", month);
}
char dayStr[3];
if (day < 10) {
sprintf(dayStr, " %d", day);
} else {
sprintf(dayStr, "%d", day);
}
if (date[5] == '0') {
printf("%d年%s月%s日\n", year, monthStr + 1, dayStr);
} else {
printf("%d年%s月%s日\n", year, monthStr, dayStr);
}
return 0;
}
```
程序流程如下:
1. 首先定义一个字符数组 `date`,用于接收用户输入的日期。
2. 提示用户输入日期,使用 `scanf()` 函数读取用户输入的字符串,并存储到 `date` 数组中。
3. 使用 `sscanf()` 函数将 `date` 数组中的年、月、日解析出来,分别存储到 `year`、`month`、`day` 变量中。
4. 判断月份和日期是否小于 10,如果是,则在字符串中加上一个空格,否则不加空格,使用 `sprintf()` 函数将处理后的字符串分别存储到 `monthStr` 和 `dayStr` 数组中。
5. 判断日期中是否有 0,如果有,则输出时省略 0 后输出,否则按照原格式输出,使用 `printf()` 函数输出结果,并在末尾换行。
6. 程序结束,返回 0。
注意,本程序并没有对用户输入的字符串进行格式验证,请确保用户输入的字符串格式正确,否则会导致程序出错。