C:有没有一种好方法可以限制/限制来自无限制扫描字符串的输出

有没有一种好方法可以限制scanf字符串的输出?如果我用一个约束测试它,那么只有一个像“.”这样的约束,它显示了我所期望的

如果(b[i]=='。)
{
printf(“c”,b[i]);
} 

但一旦我尝试添加更多,它就不再限制任何东西

如果(b[i]=='.','-')
{
printf(“c”,b[i]);
}

在获得无限制输入后,是否有一个好方法来定义允许输出哪些字符

#包括<标准h>
int main(int argc,char*argv[])
{
charb[5];
int i;
printf(“输入字符(仅显示前5个允许的字符):”;
scanf(“s”,b);
对于(i=0;i<5;i++)
{
如果(b[i]='.','-')
{
printf(“c”,b[i]);
}
其他的
{
i++;
}
}
printf(“\n”);
返回0;
}

如果(b[i]='.','-')的行为类似于:

b[i]='.;//比较并忽略结果
if('-')//测试'-'是否为非零(它是)

显然不是OP想要的


反而

如果(b[i]='.|b[i]='-')//执行最多2次比较

if(memchr("=",b[i],2))//测试b[i]是否在"的2个字符中=&引用;

if(strchr("=",b[i])//测试b[i]是否在"的3个字符中=&引用;

b[i]='\0'时,最后一个是正确的,因此不完全相同

如果循环是for(j=0;b[j];j++,那么当b[j]=='\0'时,测试strchr(",b[j])将不会发生,然后strchr("=",b[j])将是一个等价的测试


不要使用scanf(“s”,b)因为它容易缓冲区溢出。使用fgets()或宽度限制,如scanf(“%4s”,b)


代码还需要将用于遍历输入字符串的索引与允许的字符计数分开

#包括<标准h>
#包括<字符串.h>
内部主(空){
charb[100];
int i=0;
printf(“输入字符(仅显示前5个允许的字符):”;
if(fgets(b、b尺寸、标准尺寸)){
对于(int j=0;b[j]&i<5;j++){
if(strchr("=",b[j])){
printf(“%c”,b[j]);
i++;
}
}
}
printf(“\n”);
返回0;
}

发表评论