如何从字符串中分离整数并在C中操作它们?

时间:2017-04-30 17:24:28

标签: c string integer

我正在以mm-dd-yyyy格式扫描日期,我需要取出三个整数并将它们用于多个事情。如何用mm dd和yyyy创建三个整数?谢谢!

2 个答案:

答案 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;
}