在C中检查用户输入的字符串格式为“%d /%d /%d /%d /%d”

时间:2017-02-22 01:10:30

标签: c linux format scanf

我尝试使用sscanf()检查字符串的格式。即使它不匹配格式,它也不会打印错误。我不知道它有什么问题。

char        *now = 1; // assume this is the user-entered string
int         year,month,hour,min,sec;

//CHECKING IF THE ARGUMENT IS CORRECT OR NOT
if (sscanf(now,"%d/%d/%d/%d/%d\n",&year,&month,&hour,&min,&sec) == 0)   
    {
        fprintf(stderr,"\x1b[1;31mMust specify correct format\nExiting........\x1b[0m\n");
        _exit(1);   
    }

1 个答案:

答案 0 :(得分:2)

sscanf返回成功扫描和分配的字段数(如果出现错误,则返回SELECT * FROM table1 JOIN table2 ON table1.id = table2.id; )。您正在检查EOF是否都没有成功,即没有从字符串中解析出数字。这意味着即使可以解析一个整数,也不会执行%d。所以改变

if

if (sscanf(now,"%d/%d/%d/%d/%d\n",&year,&month,&hour,&min,&sec) == 0)

即使无法解析一个数字,也会执行if (sscanf(now, "%d/%d/%d/%d/%d", &year, &month, &hour, &min, &sec) != 5) 。我删除了if因为它在这里没有任何影响。