检查用户输入的字符串的格式是否为%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/%dchar*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)