[sscanf检查在输入的内容超出要求时不起作用

问题描述 投票:2回答:3

我有一个if语句,该语句应检查用户是否输入了由var分隔的4个参数,如下所示:param1,param2,param3,param4。问题是,如果用户输入的参数少于4个,则返回Error,这很好,但是如果用户输入的参数大于4,例如5,则返回“ In”。

char input[60];
char a1[42], a2[42], a3[42], a4[1];
printf("Enter info");
fgets(input, 60, stdin);
if (4 != sscanf(input,"%1[^,\n], %1[^,\n], %1[^,\n], %[^,\n]",a1, a2, a3, a4)) {
    return printf("Error"),1;
}
else
{
    printf("In");
}

我似乎找不到原因。感谢您的帮助

c scanf c-strings conversion-specifier
3个回答
2
投票

如果sscanf成功读取数据,它将返回已填充变量的数量。如果您要填充少于4个变量,那么要说成功,您应该说:

if (sscanf(input,"%1[^,\n], %1[^,\n], %1[^,\n], %[^,\n]",a1, a2, a3, a4)<=4) {
        printf("In");
}

1
投票

函数sscanf尝试从输入缓冲区(在这种情况下为字符串)中读取与格式字符串中指定数量一样多的项目,并返回读取的项目数。


1
投票

请阅读有关sscanf的更多信息:sscanf info。问题是这个

© www.soinside.com 2019 - 2024. All rights reserved.