【问题标题】:Function not returning 0 due to comparison error由于比较错误,函数未返回 0
【发布时间】:2018-02-22 07:39:47
【问题描述】:

我是编程新手。

此功能(验证)的目的是验证用户是否在命令提示符中输入了正确的命令:-h、-k、-f、-e 或 -d。如果用户还没有这样做,那么程序会打印一条错误消息,向主函数返回一个布尔值零,然后结束程序。如果用户使用其中一个命令,那么它会返回 1 并且程序在主函数中继续。

但是我从编译器收到此错误消息:

指针与整数的比较
('bool (*)(char *, char *, int)' 和 'int')
if (validate==1){"

这是我的功能:

bool validate(char* file_check, char* keyfile_check, int argc) {
  int validationcleared;
  if (strcmp(file_check, "-h") != 0 && strcmp(file_check, "-k") != 0 &&
    strcmp(file_check, "-f") != 0 && strcmp(file_check, "-e") != 0 &&
    strcmp(file_check, "-d") != 0) {
    printf("please use a valid file\n");
    return 0;
  }
  else if (strcmp(file_check, "-k") == 0 && (argc < 3)) {
    printf("please use a digit character for keyfile\n");
    return 0;
  }
  else {
    return 1;
  }
}

这是我的主要功能:

int main(int argc, char* argv[]) {
  int validationcleared;
  if (argc < 2) {
    printf("Usage: partb 1 2 3 \n");
    exit(-1);
  }
  char* filename = argv[1];
  char* keyfile = argv[2];

  validate(filename,keyfile, argc);
  if (validate==1) {
    printf("validation test passed\n");

  }

  else {
    printf("validation test not passed\n");
    return 0;
  }
}

【问题讨论】:

  • 如何缩进代码并添加一个或另一个空行以提高可读性?
  • 问题不在于您显示的代码,而在于调用validate 的代码。 Edit您的问题并显示该代码。
  • 不要用图片代替代码。
  • 显然你在某处写了if (validate==1)validate 是一个函数,而不是一个数字。你应该调用它。
  • @Ben 你上次的编辑让情况变得更糟了。请在您拨打validate的地方发布代码。

标签: c function


【解决方案1】:

这是初学者中比较常见的错误:

validate(filename, keyfile, argc);
if (validate == 1) {
    // ....

如果你想检查函数的返回值,你应该使用实际的函数调用,而不是函数的名称。像这样:

if (validate(filename, keyfile, argc) == 1) {
    // ....

或者,如果您仍想分几步完成:

bool result = validate(filename, keyfile, argc);
if (result == 1) {
    // ....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2019-01-03
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多