【发布时间】:2017-04-30 17:24:28
【问题描述】:
我正在扫描 mm-dd-yyyy 格式的日期,我需要取出三个整数并将它们用于多种用途。如何用 mm dd 和 yyyy 创建三个整数?谢谢!
【问题讨论】:
我正在扫描 mm-dd-yyyy 格式的日期,我需要取出三个整数并将它们用于多种用途。如何用 mm dd 和 yyyy 创建三个整数?谢谢!
【问题讨论】:
使用来自<stdio.h> 的sscanf 调用。
char line[80];
int m, d, y;
fgets(fgets(line, sizeof line, stdin);
sscanf(line, "%d-%d-%d", &m, &d, &y);
最好直接使用 fgets+sscanf 而不是 scanf,因为 scanf 有臭名昭著的\n 问题并且不检查缓冲区长度。
【讨论】:
sscanf()的返回值
尝试使用 fgets 进行所有输入。
do/while 循环将继续执行,直到获取有效输入。
这仅验证月份。应该添加一些东西来验证日期和年份。
检查 sscanf 的返回,确保需要的项目已经扫描成功。
#include <stdio.h>
int main(){
char line[100] = "";
int scanned = 0;
int valid = 0;
int mm = 0;
int dd = 0;
int yyyy = 0;
int x;
do {
printf("\n\t\t\t1) Input date (mm/dd/yyyy) to find days passed");
printf("\n\t\t\t2) Input passed days to find date in the year");
printf("\n\n\t\t\tYour choice (1/2): ");
if ( !( fgets ( line, sizeof line, stdin))) {
fprintf ( stderr, "problem getting input found EOF\n");
return 1;
}
if ( ( scanned = sscanf(line, "%d", &x)) != 1) {
valid = 0;
}
else {
if ( x == 1 || x == 2) {
valid = 1;
}
else {
valid = 0;
}
}
} while ( !valid);
if(x == 1) {
do {
printf ( "enter date mm-dd-yyyy\n");
if ( !( fgets ( line, sizeof line, stdin))) {
fprintf ( stderr, "problem getting input found EOF\n");
return 1;
}
if ( ( scanned = sscanf ( line, "%d-%d-%d", &mm, &dd, &yyyy)) != 3) {
valid = 0;
}
else {
valid = 1;
//validate the values for mm dd and yyyy
if ( mm < 1 || mm > 12) {
printf ( "invalid month try again\n");
valid = 0;
}
}
} while ( !valid);
}
return 0;
}
【讨论】: