функция не может вернуть значение int - PullRequest
1 голос
/ 23 апреля 2011
int sum_s1=0, sum_s2=0;

int comps(char s1[], char s2[]) {

  if (s1[0] == '\0' && s2[0] == '\0') {

     if (sum_s1 == sum_s2) {
       printf("hihi"); //printable
       return 1;  //return the 4202692

     } else {
       return 0;
     }

  } else {

    if (*s1 != '\0') {

       if (s1[0]!=32) {
         sum_s1 += s1[0];

       } else {
         sum_s1 += 0;

       }
       *s1 = *(s1+1);
    } 
    if (*s2 != '\0') {

       if (s2[0]!=32) {
         sum_s2 += s2[0];

       } else {
         sum_s2 += 0;

       }

      *s2 = *(s2+1);
    } 

      if (*s1 != '\0' && *s2 == '\0') equalIgnoreSpace(s1+1, "\0");
      if (*s1 == '\0' && *s2 != '\0') equalIgnoreSpace("\0", s2+1);
      if (*s1 != '\0' && *s2 != '\0') equalIgnoreSpace(s1+1, s2+1);
      if (*s1 == '\0' && *s2 == '\0') equalIgnoreSpace("\0", "\0");
  }
}

int main() {

  int compa=1;


  compa = comps("abc f", "abcf");
  printf("%d", compa);  //return the 4202692


  if (compa == 1) {
     printf("Two string are equal");
  } else {
     printf("Two string are not equal");
  }

  getchar();
  return 0;
}

comps() должен return 1 и остановиться, но я не могу получить 1 в основной функции. Как я могу это исправить?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2011

в функции comps нет оператора возврата [в другом случае]

int comps(char s1[], char s2[]) 
{
  if (s1[0] == '\0' && s2[0] == '\0') 
 {
     if (sum_s1 == sum_s2) 
     {
       printf("hihi"); //printable
       return 1;  //return the 4202692
     }
     else 
       return 0;
  }
 else
 {
  ...
  ...
  return code;
 }   
}
0 голосов
/ 23 апреля 2011

Вы пытаетесь изменить статическую строку с помощью *s1 = *(s1+1); , и ваша программа вылетает . Попробуйте вместо этого:

int main() {

    int compa=1;

    /* Allocated memory can be modified without adverse effects! */
    char s1[64];
    char s2[64];
    strcpy(s1, "abc f");
    strcpy(s2, "abcf");

    compa = comps(s1, s2);
    printf("%d", compa);  //return the 4202692

    if (compa == 1) {
        printf("Two string are equal");
    } else {
        printf("Two string are not equal");
    }

    getchar();
    return 0;
}

Также, как упомянул Сурав, comps не содержит операторов возврата. Компиляция дает:

1>c:\code\test\test.cpp(83): warning C4715: 'comps' : not all control paths return a value

И compa будет иметь неопределенное значение, назначенное ему, как только вы назначите ему (неопределенное) возвращаемое значение comps.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...