Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查用户输入的字符串的格式是否为%d/%d/%d/%d/%d/%d”;在C中_C_Linux_Format_Scanf - Fatal编程技术网

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

检查用户输入的字符串的格式是否为%d/%d/%d/%d/%d/%d”;在C中,c,linux,format,scanf,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,&mon

我尝试使用
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);   
    }
返回成功扫描和分配的字段数(或出现错误时返回
EOF
)。您正在检查
%d
中是否没有一个成功,即没有从字符串中解析任何数字。这意味着即使可以解析一个整数,也不会执行
if
。所以改变

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


即使一个数字无法解析,它也会执行
if
。我删除了
\n
,因为它在这里没有任何效果。

我不确定您希望
char*now=1
做什么。您是否打算初始化指向1?…的指针,或者,借助上一条注释,检查
EOF
per.@ryker是的。假设像char*now=2000/300/2。它应该给出一个错误,因为它的格式不是%d/%d/%d/%d/%d
char*now=2000/300/2
不是合法的初始化。Niether是:
char*now=1。可以执行
char*now=“2000/300/2”
sscanf()
返回成功分配的字段数(或出错时的EOF)。。。
if (sscanf(now, "%d/%d/%d/%d/%d", &year, &month, &hour, &min, &sec) != 5)