如何使用带有2d数组的isalnum

时间:2012-02-19 17:18:29

标签: c

char dict[N][M];

for(i = 0; i < N; i++)
{
    do
    {
        printf("enter word at position: %d\n", i);    
        gets(dict[i]);
        printf("you entered %s\n", dict[i]);    

        if(isalnum(dict[i]))
        {
            printf("error\n");
        }
    }while (isalnum(dict[i]));    
}

您好我是C的新手,我希望使用isalnum进行验证,但需要使用2d数组 例如,如果dict[0][80]是非字母数字,则用户再次输入。

由于

1 个答案:

答案 0 :(得分:1)

当您尝试编译代码时,编译器应该打印类似于此的警告:

  

警告:传递'isalnum'的参数1会使指针产生整数而不进行强制转换。

此警告表示代码没有按照您的意愿执行,这就是原因。 “isalnum”函数的签名是int isalnum(int c),这意味着它需要一个整数(即字符)参数;但是,你用参数dict[i]调用它,它是一个char *(指向一个字符的指针,例如一个字符串)。

我猜你要做的是检查字符串中的每个字符是字母还是数字。尝试使用您自己的函数将您的调用替换为“isalnum”,如下所示:

/* Returns true iff each character of "s" is alphabetic or numeric. */
int str_isalnum(char * s) {
  int i=0, len=strlen(s);
  for (i=0; i<len; i++) {
    if (!isalnum(s[i])) return 0; /* false */
  }
  return 1; /* true */
}

/* ... */
  printf("you entered %s\n", dict[i]);    
  if (!str_isalnum(dict[i])) {
    printf("error\n");
  }
} while (!str_isalnum(dict[i]));