C的新手,在编译时遇到一些麻烦

时间:2013-07-06 23:52:27

标签: c quicksort

当我编译几个简短的C程序时,我遇到了一些错误,而且我对于发生的事情非常迷茫:

第一个给出了这些错误:

  

Q3.c:在函数âsort中:

     

Q3.c:11:警告:隐式声明函数âq_sortâ

     

Q3.c:顶级:

     

Q3.c:14:警告:âq_sortâ

的冲突类型      

Q3.c:11:注意:之前的“q_sort”隐式声明就在这里

     

Q3.c:在函数âmainâ:

     

Q3.c:52:警告:隐式声明函数âmallocâ

     

Q3.c:52:警告:内置函数的不兼容隐式声明âmallocâ

     

Q3.c:56:警告:隐式声明函数â€

解决部分代码:

void sort(int* number, int n){
 /*Sort the given array number , of length n*/
 q_sort(number, 0, (n - 1));
}

void q_sort(int* numbers, int left, int right)
{
  int pivot, l_hold, r_hold;

  l_hold = left;
  r_hold = right;
  pivot = numbers[left];
  while (left < right)
  {
    while ((numbers[right] >= pivot) && (left < right))
      right--;
    if (left != right)
    {
      numbers[left] = numbers[right];
      left++;
    }
    while ((numbers[left] <= pivot) && (left < right))
      left++;
    if (left != right)
    {
      numbers[right] = numbers[left];
      right--;
    }
  }
  numbers[left] = pivot;
  pivot = left;
  left = l_hold;
  right = r_hold;
  if (left < pivot)
    q_sort(numbers, left, pivot-1);
  if (right > pivot)
    q_sort(numbers, pivot+1, right); 
}

由于我的其他问题程序都使用相同的排序方法,并给出相同的错误,修复此问题将解决所有问题。

编辑:另外一个问题。我在另一个程序上得到了这个错误

  

Q5.c:在功能âsticky中:

     

Q5.c:29:警告:指针和整数之间的比较

     

Q5.c:29:警告:与字符串文字进行比较导致未指定的行为

在这部分代码中:

void sticky(char* word){
     int i = 0;
     /*Convert to sticky caps*/
     while (word[i] !="\0"){    // line 29
          if (i%2 == 0)
                word[i] = toUpperCase(word[i]);
          else
                word[i] = toLowerCase(word[i]);
          i++;
     }
}

4 个答案:

答案 0 :(得分:7)

交换两个函数的定义...在C中,您必须先声明(或定义)一个函数,然后才能使用它。

对于第二个问题:您必须使用单引号来定义字符。

答案 1 :(得分:2)

你也可以在.c文件的开头定义它们(它可以在你的库之后),然后你可以在任何地方以任何顺序使用它们。

像:

#include <stdio.h>

void sort(int*, int n);
void q_sort(int*, int, int);

...
...
/* Any code */

/* Your sort function */
/* Your q_sort function */

/* Any code*/

答案 2 :(得分:1)

功能sticky()的问题在于,当您执行char时,您要将char*(word[i] != "\0")进行比较。

“\ 0”不是字符\0,它是指向包含字符\0的字符串的指针。要解决此问题,请改用(word[i] != '\0')

答案 3 :(得分:0)

除了以上几个答案中所说的内容之外,我没有什么可说的。当你编写一个函数并在文件中使用它时,只需要一个C基础。

当您使用/ cal一个像'qsort'这样的函数时,您应该始终在程序中的任何位置调用它之前/之上。所以规则是你的程序应该知道你正在调用的函数的原型。在这种情况下它:

void q_sort(int * numbers,int left,int right);

在#include所有必要的'.h'文件并定义所有宏之后,通常会在程序文件的顶部提及此原型。

或者您也可以在调用之前选择在顶部定义函数(完整函数体)。

如果没有找到声明,那么其他编译器就会陷入困境。