2016-09-29 113 views
0

我通過堆棧做了一個括號檢查器程序。它將字符串作爲輸入,並檢查字符串或表達式是否等於no。開口和閉合的括號。如果是,它會打印「Paranthesis are balanced」。否則「Paranthesis不平衡」。但另一個非常奇怪,它只是打印一些隨機值,並沒有將表達式作爲輸入,只是單獨打印一些垃圾值。下面的代碼括號平衡器程序

#include <stdio.h> 
#include <string.h> 
#include <stdbool.h> 


// Structure defining Stack data structure 
struct Stack { 
    int count; 
    char data[50]; 
} s; 

/* 
Initializes the count index to 0 
*/ 
void initialize() { 
s.count = 0; 
} 

/* 
Checks if Stack is Full or not 
*/ 
bool Is_Full() { 
    if(s.count > 50) 
     return true; 
    else 
     return false; 
} 

/* 
Checks if Stack is Empty or not 
*/ 
bool Is_Empty() { 
if(s.count == 0){ 
    return true; 
} 
else{ 
    return false; 
} 
} 

/* 
Adds an element to stack and then increment count index 
*/ 
bool push(int num) { 
    if (Is_Full()) 
     return false; 
    else { 
     s.data[s.count + 1] = num; 
     s.count++; 
     return true; 
    } 
} 

/* 
Removes count element from stack and decrement count index 
*/ 
bool pop() { 
    if (Is_Empty()) 
     return false; 
    else { 
     s.count = s.count - 1; 
     s.data[s.count+1]; 
    } 
    return true; 
} 

int main(void) { 
    char expression[100]; 
    int i, len; 
    initialize(); 
    printf("Enter an expression \n"); 
    printf("%s", &expression); 
    len = strlen(expression); 
    /* 
    # for '{' : we push '{' in stack 
    # for '}' : we pop a character from stack. For every '}' there must be one '{' earlier. 
       This will ensure that 
       ** There are equal number of '{' and '}' characters in string. 
       ** For every '{' there is a '}' in input string later. 

    */ 
    for(i = 0; i < len; i++){ 
     if(expression[i] == '(' || expression[i] == '{' || expression[i] == '['){ 
      push(expression[i]); 
     } 
      if(expression[i] == ')' || expression[i] == '}' || expression[i] == ']'){ 

       pop(); 
     } 
    } 

    if(Is_Empty()){ 
     printf("Parenthesis are balanced\n"); 
    } 
    else{ 
     printf("Parenthesis are unbalanced\n"); 
    } 
    return 0; 
} 

和這裏的輸出: -
enter image description here

+2

沒有圖像的文字。將文字發佈爲文字!看[問],我們沒有調試服務。 – Olaf

+1

'if(s.count> 50)'>'if(s.count> = 50)' –

+0

您的代碼沒有意義。我建議打開編譯器警告,因爲一個好的編譯器可能會有很多關於's.data [s.count + 1];'的行;''''' – EOF

回答

3

它的打印隨機數據的原因是因爲你打印expression不寫任何東西進去:

printf("%s", &expression); 

所以你實際上沒有讀取任何東西。你需要使用scanf那個:

scanf("%s", expression); 
1

因此,我們宣佈一個字符數組:

char expression[100]; 

,然後我們打印:

printf("%s", &expression); 

除了這個空字符數組真的不爲空,而是包含任何垃圾數據存在於它所佔用的內存中。所以你最多可以打印100個隨機字符。

您是否有意在此處使用scanf

+0

拍攝,我忘了...但現在我修好了,現在編譯器不打印「圓括號不平衡」的不平衡括號, 該怎麼辦? – Sami