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
但使用二维数组进行验证
例如,如果 dict[0][80]
不是字母数字,用户将再次输入。
谢谢
最佳答案
当您尝试编译代码时,您的编译器应该打印与此类似的警告:
warning: passing argument 1 of ‘isalnum’ makes integer from pointer without a cast.
此警告表明代码没有执行您想要的操作,原因如下。 “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]));
关于c - 如何将 isalnum 与二维数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9351307/