2014-11-06 70 views
10

我想寫一個實現Pop和Push函數的程序。問題是,我試圖傳遞的指向整數頂部的功能,使這個整數不斷變化的指針,但是當我嘗試編譯我總是得到這一行:C編程,錯誤:被調用的對象不是函數或函數指針

​​
#include<stdio.h> 
#include<stdlib.h> 

#define MAX 10 
int push(int stac[], int *v, int *t) 
{ 
    if((*t) == MAX-1) 
    { 
     return(0); 
    } 
    else 
    { 
     (*t)++; 
     stac[*t] = *v; 
     return *v; 
    } 
} 

int pop(int stac[], int *t) 
{ 
int popped; 
if((*t) == -1) 
{ 
     return(0); 
} 
else 
{ 
    popped = stac[*t] 
    (*t)--; 
    return popped; 
} 
} 
int main() 
{ 
int stack[MAX]; 
int value; 
int choice; 
int decision; 
int top; 
top = -1; 
do{ 
    printf("Enter 1 to push the value\n"); 
    printf("Enter 2 to pop the value\n"); 
    printf("Enter 3 to exit\n"); 
    scanf("%d", &choice); 
    if(choice == 1) 
    { 
     printf("Enter the value to be pushed\n"); 
     scanf("%d", &value); 
     decision = push(stack, &value, &top); 
     if(decision == 0) 
     { 
      printf("Sorry, but the stack is full\n"); 
     } 
     else 
     { 
      printf("The value which is pushed is: %d\n", decision); 
     } 
    } 
    else if(choice == 2) 
    { 
     decision = pop(stack, &top); 
     if(decision == 0) 
      { 
       printf("The stack is empty\n"); 
      } 
     else 
      { 
       printf("The value which is popped is: %d\n", decision); 
      } 

    } 
}while(choice != 3); 
printf("Top is %d\n", top); 

} 
+5

+1爲異國情調的_missed分號_情況下,歡迎來到stackoverflow :) – Rerito 2014-11-06 13:09:58

+0

這個評論讓我微笑很多次... – Frederick 2015-04-09 21:26:36

回答

17

你錯過了一個分號只是錯誤在該行之前:

poped = stac[*t] <----- here 
(*t)--; 

這樣做的原因奇怪的錯誤是編譯器鋸某事像那:

poped = stac[*t](*t)--; 

它可以解釋爲對來自表的函數指針的調用,但這顯然沒有意義,因爲stac是一個int數組,而不是一個函數指針數組。

+0

謝謝,我正在尋找的錯誤,我不能相信我沒有' t看錯過的分號。 – 2014-11-06 14:38:42

+1

@AbylIkhsanov - 這就是這些編譯器的生活方式(這是一個很好的教訓 - 您經常需要查看消息中提到的行之前的錯誤。 – 2014-11-06 14:54:24

相關問題