c - 如何将 isalnum 与二维数组一起使用

标签 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 但使用二维数组进行验证 例如,如果 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/

相关文章:

c - 在 fork 中写入和读取 - C

c - GCC 不一致的编译错误 'has no member named '

c - 需要检查struct是否已经初始化

c - 指针和排序

c - scanf 格式字符串中 "%c"后的空格忽略最后一个字符

c++ - 如何在 C/C++ 中以编程方式查找 "Saved Games"文件夹?

c - 丰富的编辑类

c - C 形式定义中的命名空间

c - st_mtimensec 在 struct stat 中不可用

c - 节点的全局变量