【问题标题】:error: assigning to 'int' from incompatible type 'void'错误:从不兼容的类型“void”分配给“int”
【发布时间】:2018-11-12 20:52:13
【问题描述】:

我正在尝试编写一个函数,该函数将接收一个字符串和一个字符,并返回该字符最后出现的位置的索引。我在编译这个时遇到了问题,从问题的标题可以看出,我收到一个错误:

错误:从不兼容的类型“void”分配给“int”

我尝试将函数的“void”更改为“int”,然后尝试让函数打印结果,但这导致了一组不同的错误。我只是感到困惑,因为我的老师总是向我们展示总是以“void”作为返回类型的函数,而这种类型的返回是我们班迄今为止唯一看到的。

#include <string.h>
#include <stdio.h>


void findLast (char string[], char letter){

    int Num[20];
    int i;
    int count=-1;

    for (i=0; i<strlen(string);i++){

        if (letter==string[i]){


            count=count+1;
                Num[count]=i;
        }
    }

    int result=Num[count];

}


int main (void){

    char string[20];
    char letter;
    int result;

    printf("Enter your string: ");
    scanf("%s", string );

    printf("Enter your letter: ");
    scanf(" %c", &letter);

    result = findLast(string, letter);

    printf("%d", result);

    return 0;

}

【问题讨论】:

  • 如果你打算返回一个值,声明的返回类型应该是int而不是void,并且函数中应该有一个return语句。
  • 将返回类型更改为int,并将return Num[count];放在函数末尾。
  • 如果您要查找字符串中最后一次出现的字符,则应从字符串末尾开始并向后扫描。换句话说for (i = strlen(string) - 1; i &gt;= 0; i--) if (letter == string[i]) return i;

标签: c string function void return-type


【解决方案1】:

您的代码函数的类型为 void,这意味着没有返回值。只需将函数类型更改为 int 并返回结果即可。

修改代码:

int findLast (char string[], char letter){

    int Num[20];
    int i;
    int count=-1;

    for (i=0; i<strlen(string);i++){

        if (letter==string[i]){


            count=count+1;
                Num[count]=i;
        }
    }

    int result=Num[count];

    return result;

}

【讨论】:

    【解决方案2】:

    正如@HolyBlackCat所说,你的函数需要返回值,应该写成如下:

    int findLast (char string[], char letter){    
    
        return Num[count];    
    }
    

    void 关键字指定不返回任何内容。

    【讨论】:

      【解决方案3】:

      void 类型表示函数不返回值。由于您的函数应该返回一个整数,因此您需要将 void 替换为 int 并使用 return 语句返回结果。也不需要变量 Numcount。在您的for 循环中,函数 strlen 被多次调用。使用字符串终止符作为循环保护更有效。这是一个简化的版本:

      int findLast(char string[], char letter)
      {
          int result, i;
      
          result = -1;
          i = 0;
          while (string[i] != '\0') {
              if (string[i] == letter) {
                  result = i;
              }
              i++;
          }
          return result;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 1970-01-01
        • 2016-01-04
        • 2019-12-20
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多