2015-09-24 483 views
-2

我編寫了一個堆棧示例,但編譯時顯示錯誤消息。使用C語言編譯堆棧程序時的錯誤消息

在switch case 4中:exit();這條線的問題是:認爲

64 9 C:\Users\pavilion 15\OneDrive\Documents\stack.cpp [Error] return-statement with a value, in function returning 'void' [-fpermissive] 

這是編譯的代碼,當我看到錯誤消息。有人可以幫我解決這個問題嗎?

#include<stdio.h> 
#include<conio.h> 
#define MAX 5 

int stack[MAX]; 
int top = -1; 

void push(int); 
int pop(); 
void display(); 

main(){ 

    int choice,num; 
    while(1){ 
     printf("Enter your choice\n"); 
     printf("1.Push\n"); 
     printf("2.Pop\n"); 
     printf("3.Display\n"); 
     printf("Exit\n"); 
     scanf("%d", &choice); 

     switch(choice){ 
      case 1: 
       printf("Enter a number"); 
       scanf("%d", &num); 
       push(num); 
       break; 
      case 2: 
       num = pop(); 
       break; 
      case 3: 
       display(); 
       break; 
      case 4: 
       exit(1); 
      default: 
       printf("invalid input"); 
     } 
    } 

} 


void push(int element){ 

    if(top == MAX-1){ 
     printf("Stack OverFlow"); 
     return; 
    } 
    top = top +1; 
    stack[top]=element; 
} 

void pop(){ 
    int element; 
    if(top == -1){ 
     printf("Stack is empty\n"); 
     return; 
    } 
    element = stack[top]; 
    top = top - 1; 
    printf("%d has been deleted", element); 
    return element; 
} 

void display(){ 
    int i; 
    if(top==-1){ 
     printf("stack is empty!"); 
     return; 
    } 
    printf("\n\n"); 
    for(i=top;i>0;i--) 
    printf("%d\n", stack[i]); 
} 

enter image description here

+3

你不能從'void'函數返回一個值。 – redFIVE

回答

2

您聲明爲int pop(),但您定義了void pop(),並且在您定義的範圍內嘗試return element

現在,當您執行num = pop()時,通常會導致錯誤,因爲它無法爲您宣佈的函數找到正確的定義,但由於功能void pop()功能不正確,編譯器會提前停止。

0

你不能從一個void函數返回一個值。

void pop(){ 
    int element; 
    if(top == -1){ 
     printf("Stack is empty\n"); 
     return; 
    } 
    element = stack[top]; 
    top = top - 1; 
    printf("%d has been deleted", element); 
    return element; 
} 

需求是int pop()

0

不能從pop()返回一個元素 - 這是void(沒有返回類型)...

...酷似錯誤信息說!

最簡單的修復方法是使其返回int,但您需要一個特殊的返回碼來指示錯誤。 或者:int pop(int *v) - 失敗時返回0或成功時返回1,並填充v

+0

我做了這個改變,無法解決這個錯誤。 –

+0

閱讀整個答案:一旦你讓'pop'返回一個'int',你必須解決你的錯誤情況(目前只是'return;') - 如果你說你正從函數返回一個'int',那麼你總是從它返回一個'int'。 – John3136