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]
是非字母数字,则用户再次输入。
由于
答案 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]));