2016-07-28 2 views
0

Ich bin nicht so viel Erfahrung mit C-Sprache.Wie man den unten unbekannten Typfehler von diesem einfachen c-Stapelprogramm repariert?

Also habe ich versucht, ein einfaches c-Programm für den Stapel zu schreiben, aber es zeigt eine Reihe von Fehlern.

Also kann ich etwas in Datenelementen falsch gemacht werden.

Fehlerprotokoll:

stack.c:31:11: error: unknown type name ‘stack’ 
void push(stack[],top){ 
     ^
stack.c:31:19: error: unknown type name ‘top’ 
void push(stack[],top){ 
       ^
stack.c:45:6: warning: conflicting types for ‘pop’ [enabled by default] 
void pop(stack,top){ 
    ^
stack.c:19:1: note: previous implicit declaration of ‘pop’ was here 
pop(); 
^ 
stack.c:54:6: warning: conflicting types for ‘traverse’ [enabled by default] 
void traverse(stack,top){ 
    ^
stack.c:22:1: note: previous implicit declaration of ‘traverse’ was here 
traverse(); 
^ 
stack.c: In function ‘traverse’: 
stack.c:62:20: error: subscripted value is neither array nor pointer nor vector 
printf("%d\n",stack[i]); 

Programm:

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

void main(){ 
    int stack[10]; 
    int i; 
    int choice; 
    printf("Enter the elementz\n"); 
    for (i = 0; i < 10; i++){ 
     scanf("%d",&stack[i]); 
     printf("++++++++ MENU ++++++++\n\n\n"); 
     printf("Enter 1 to push \n Enter 2 to pop\n Enter 3 to display \n\n\n"); 
     printf("Enter you choice \n\n\n"); 
     scanf("%d",&choice); 
     switch(choice){ 
     case 1 : 
      push(); 
      break; 
     case 2: 
      pop(); 
      break; 
     case 3 : 
      traverse(); 
      break; 
     default: 
      printf("Enter the correct choice\n"); 


     } 
    } 
} 

void push(stack[],top){ 
    int item; 
    int max = 10; 
    printf("Enter the number you want to input\n"); 
    scanf("%d",&item); 
    if(top == stack[max]-1){ 
     printf("It's full\n"); 
    } 
    else{ 
     top = top+1; 
     stack[top] = item; 

    } 
} 

void pop(stack,top){ 

    if(top == -1){ 
     printf("STack is empty\n"); 
    } 
    else{ 
     top = top-1; 
    } 
} 

void traverse(stack,top){ 
    int i; 
    if(top == -1){ 
     printf("WHy r u giving m empty stack to print"); 
    } 
    else{ 
     for (i = 0; i <10; i++){ 
     printf("Your stack is : \n"); 
     printf("%d\n",stack[i]); 
     } 
    } 
} 

Vielen Dank im Voraus.

+1

Bitte einige Zeit dauern, die Grundlagen zu erklären, Definition und Verwendung von Funktionen in C. Es ist nicht sinnvoll, Antworten auf solche grundlegenden Konzepte hier zu verstehen. –

+4

Ich stimme ab, diese Frage als off-topic zu schließen, weil die Antworten auf das OP-Problem in jedem grundlegenden Lehrbuch zu C. gefunden werden können. –

Antwort

1
  • Sie müssen Typnamen für jedes Funktionsargument schreiben. (die Fehlerursache, die Sie gepostet haben)
  • Sie müssen Funktionen definieren oder definieren, die vor verwenden. (die Fehlerursache, die Sie gepostet haben)
  • Sie müssen Argumente übergeben, die Funktionen für die Verwendung von Funktionen benötigen. (Die Fehlerursache, die Sie gepostet haben)
  • Änderungen an übergebenen Argumenten wirken sich nicht auf die lokalen Variablen des Aufrufers aus. Daher müssen Sie Zeiger verwenden, damit sie von Angerufenen geändert werden.
  • Die Bedingung, um zu überprüfen, ob der Stapel voll ist, ist falsch.
  • Der Loop-Zustand in traverse() sieht seltsam aus.
  • Das Lesen von Elementen des Stapels und das Ausführen von Stapelmanipulationen basierend auf ausgewählten Menüs in der gleichen Schleife sieht seltsam aus, da Leseelemente den mit dem Menü behandelten Stapel beschädigen.
  • Sie sollten den Standard int main(void) in einer gehosteten Umgebung anstelle von void main() verwenden, was in C89 illegal ist und in C99 oder später in der Implementierung definiert ist, es sei denn, Sie haben einen besonderen Grund, eine nicht standardmäßige Signatur zu verwenden.
  • Sie sollten Ihren Code richtig mit Einzug formatieren.

Try this:

#include <stdio.h> 
#include <stdlib.h> 
void push(int stack[],int* top); 
void pop(int stack[],int* top); 
void traverse(int stack[],int top); 
int main(void){ 
    int stack[10]; 
    int top = 9; 
    int i; 
    int choice; 
    printf("Enter the elementz\n"); 
    for (i = 0; i < 10; i++){ 
     scanf("%d",&stack[i]); 
    } 
    for (i = 0; i < 10; i++){ 
     printf("++++++++ MENU ++++++++\n\n\n"); 
     printf("Enter 1 to push \n Enter 2 to pop\n Enter 3 to display \n\n\n"); 
     printf("Enter you choice \n\n\n"); 
     scanf("%d",&choice); 
     switch(choice){ 
      case 1 : 
       push(stack,&top); 
       break; 
      case 2: 
       pop(stack,&top); 
       break; 
      case 3 : 
       traverse(stack,top); 
       break; 
      default: 
       printf("Enter the correct choice\n"); 


     } 
    } 
} 
void push(int stack[],int* top){ 
    int item; 
    int max = 10; 
    printf("Enter the number you want to input\n"); 
    scanf("%d",&item); 
    if(*top == max-1){ 
     printf("It's full\n"); 
    } 
    else{ 
     *top = *top+1; 
     stack[*top] = item; 

    } 
} 
void pop(int stack[],int* top){ 

    if(*top == -1){ 
     printf("STack is empty\n"); 
    } 
    else{ 
     *top = *top-1; 
    } 
} 
void traverse(int stack[],int top){ 
    int i; 
    if(top == -1){ 
     printf("WHy r u giving m empty stack to print"); 
    } 
    else{ 
     for (i = 0; i <= top; i++){ 
      printf("Your stack is : \n"); 
      printf("%d\n",stack[i]); 
     } 
    } 
} 
Verwandte Themen