c - 替代数据格式
问题描述
我有两个存储两个不同日期的结构对象。我希望确保它们的格式为 (dd/mm/yyyy) | (dd-mm-yyyy) 然后取它们的差值。
如果 stderror 不是 dd/mm/yyyy 格式,则打印它,但它似乎不接受这两种格式。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <errno.h>
/*
# Objective: date1.c is to write in two dates and determine the difference
in the number of days between them.
Must be date inputs must be written into console as <day>/<month>/<year> |
<day>-<month>-<year>
*/
int minimumYear = 0; // O AD
int maximumYear = 10000; // 10000 AD
// Struct for the date
typedef struct {
int dd;
int mm;
int yyyy;
} dateFormat;
混乱的主要来源...
int main() {
dateFormat getDate1;
dateFormat getDate2;
//input correct date
fprintf(stderr, "Enter date in format (day/month/year): ");
scanf("%d/%d/%d", &getDate1.dd, &getDate1.mm, &getDate1.yyyy);
fprintf(stderr, "Enter date in format (day/month/year): ");
scanf("%d/%d/%d", &getDate2.dd, &getDate2.mm, &getDate2.yyyy);
}
解决方案
您应该将输入作为字符串读取到数组中,fgets()
并尝试sscanf()
根据这两种格式对其进行解析。如果两种格式都不匹配输入,请抱怨:
int main() {
char buf[128];
dateFormat getDate1;
//input correct date
fprintf(stderr, "Enter date in format (day/month/year): ");
if (!fgets(buf, sizeof buf, stdin)) {
fprintf(stderr, "premature end of file\n");
return 1;
}
if (sscanf(buf, "%d/%d/%d", &getDate1.dd, &getDate1.mm, &getDate1.yyyy) != 3
&& sscanf(buf, "%d-%d-%d", &getDate1.dd, &getDate1.mm, &getDate1.yyyy) != 3) {
fprintf(stderr, "invalid date: %s", buf);
return 1;
}
...
}
推荐阅读
- swift - Swift WatchOS 错误:控制器的接口描述(“图像”)中的未知属性
- symfony - 配置键“page_range”分页
- c# - 如何使用 C# 驱动程序在 MongoDb 中嵌套在字典(文档数组)中的列表中插入值?
- microsoft-dynamics - 其中哪一个更好更快?
- java - 三元运算符的奇怪行为
- amazon-web-services - ELB目标组-ECS启动任务时不会自动添加目标
- amazon-web-services - 在 AWS { "errorMessage": "Unable to import module 'lambda'" } (S3+Lambda) 中出现此错误
- oauth-2.0 - 多个 URL 上的身份服务器
- java - 我的 SharedPreferences 值由于某种原因没有通过
- node.js - 找不到NodeJs Mongodb连接问题副本集