C 如何防止输入成为某些字符?

C 如何防止输入成为某些字符?,c,logic,C,Logic,这是我代码的一部分:我不希望用户输入除了a-Z、a-Z、1-9和Z之外的任何内容。我不知道我做错了什么!基本上,如果用户输入的不是这些字符,它将打印一个错误。我已经试着调试了几个小时,我觉得我只会让事情变得更“混乱” #包括 #包括 #包括 void get_outputfile(char*outname,int count_尝试次数); 文件*CreateFile(){ 字符名[20]; 字符用户_决策[1]; int count_尝试次数=0; 对于(;;){ 获取输出文件(名称、尝试次数)

这是我代码的一部分:我不希望用户输入除了a-Z、a-Z、1-9和Z之外的任何内容。我不知道我做错了什么!基本上,如果用户输入的不是这些字符,它将打印一个错误。我已经试着调试了几个小时,我觉得我只会让事情变得更“混乱”

#包括
#包括
#包括
void get_outputfile(char*outname,int count_尝试次数);
文件*CreateFile(){
字符名[20];
字符用户_决策[1];
int count_尝试次数=0;
对于(;;){
获取输出文件(名称、尝试次数);
文件*测试;
测试=fopen(名称,“r”);
如果(测试!=NULL){
fclose(测试);
printf(“文件%s已存在,是否覆盖(Y/N)?”,名称);
scanf(“%s”,用户决定);
}
if(用户决策[0]!='Y'&用户决策[0]!='Y'){
尝试次数=0;
继续;
}
否则{
返回fopen(名称,“w”);
}
}
返回0;
}
void get\u outputfile(char*outname,int count\u尝试次数){
int i;
printf(“输入输出文件名:”);
scanf(“%s”,outname);
fgetc(stdin);
对于(i=0;i1){
printf(“您已超过最大尝试次数。请重新启动程序并重试。\n”);
出口(0);
}
计数尝试次数++;
printf(“文件名必须是z、a-z或a-z\n输入输出文件名:”);
scanf(“%s”,outname);
i=0;
}
}
printf(“返回..\n”);
返回;
}
int main(){
FILE*afile=CreateFile();
返回0;
}
中的逻辑

  if(((outname[i]<'a'||outname[i]>'z')&&(outname[i]<'A'||outname[i]>'Z')&&(outname[i]<'0'||outname[i]>'9'))&&(outname[i]!='_')){

阅读更多信息,尤其是有关
“%[”
格式的信息。对于您当前的代码,您应该查看函数。并稍微考虑一下您的逻辑。尝试先在纸上执行检查逻辑。作为最后一种手段,在检查所有变量和每个表达式(以及子表达式)的同时,在调试器中逐步检查代码。
  if(((outname[i]<'a'||outname[i]>'z')&&(outname[i]<'A'||outname[i]>'Z')&&(outname[i]<'0'||outname[i]>'9'))&&(outname[i]!='_')){
int isValidCharacter(char c)
{
   return ( (c >= 'a' && c <= 'z') || // Takes care of lower case letters
            (c >= 'A' && c <= 'A') || // Takes care of uppper case letters
            (c >= '0' && c <= '9') || // Takes care of numberss
            c == '_' );               // Takes care of _
}
  if ( !isValidCharacter(outname[i]) )
  {
     if (count_attempts>1){

     ...