我正在以mm-dd-yyyy格式扫描日期,我需要取出三个整数并将它们用于多个事情。如何用mm dd和yyyy创建三个整数?谢谢!
答案 0 :(得分:1)
使用<stdio.h>
的{{3}}来电。
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
问题,并且不检查缓冲区长度。
答案 1 :(得分:0)
尝试使用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;
}