2014-10-16 732 views
0

我正在嘗試編寫一個程序來模擬DFA。我需要做的是從用戶處獲取大量輸入並將其保存在兩個獨立的數組中(將其作爲行和列使用),然後創建第三個數組(第2個數組)作爲第一個數值表兩個陣列。在二維數組中存儲字符串和字符(C)

例如:數組2 = {A,B} ARRAY1 = {Q1,Q2,Q3} 陣列[ARRAY1] [數組2] =(見下表)

a b 

========

q1 | v1 v2

q2 | v3 v4

q3 | V5 V6

問題:

1)I不能保存字符串Q1,Q2,Q3 ...在陣列

2)所述第二陣列值以某種方式覆蓋在第一陣列值,(也許因爲我現在用的是同一個變量作爲他們的櫃檯?如果我改變了第二循環的計數器變量,它給分段錯誤

這將是巨大的,如果有人能指出我做的哪一部分是錯誤的。

編輯:分割問題是solv編輯,感謝coolguy和jayesh的回答。我仍然有一個問題,它的array1不返回一個字符串,它只返回字符,如果我輸入q1它只返回q。

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

// Function declaration 
void clearNewLines(void); 


int main(int argc, char *argv[]){ 

    // Number of states and number of alphabets of DFA 
    int numStates; 
    int numAlphabets; 

    // Array for name of alphabets, and name of states 
    char nameOfAlphabets[numAlphabets]; 
    char nameOfStates[numStates]; 

    // Saving transition table 
    char *transitionTable[numStates][numAlphabets]; 

    // Read numStates 
    printf("Enter the number of STATES:"); 
    scanf("%d",&numStates); 

    // Flush STDIN 
    clearNewLines(); 

    // Read the nameOfStates 
    int i; 
    for(i=0;i<numStates;i++){ 
     printf("Name of STATES:"); 
     fgets(&nameOfStates[i], 100,stdin); 
    }// End of for-loop to read nameOfStates 

    // Read numAlphabets 
    printf("Enter the number of ALPHABETS: "); 
    scanf("%d", &numAlphabets); 

    // Flush STDIN 
    clearNewLines(); 

    // Read name of alphabets 

    for(i=0;i<numAlphabets;i++){ 

     printf("Name of ALPHABETS:"); 
     nameOfAlphabets[i] = getchar(); 

     // Flush STDIN 
     clearNewLines(); 

    }// End for-loop to read alphabets 

    // Get the transitionTable[states][alphabets] 
    int row; 
    for(row=0;row<numStates;row++){ 

     int col; 
     for(col=0;col<numAlphabets;col++){ 

      printf("Enter Transition From %c to %c: ",nameOfStates[row],nameOfAlphabets[col]); 
      printf("\n"); 
     } 

    } 

    return 0; 
}// End of main function 

/* 
* 
* clearNewLines - clear any newline character present at the STDIN 
*/ 
void clearNewLines(void) 
{ 
    int c; 
    do 
    { 
     c = getchar(); 
    } while (c != '\n' && c != EOF); 
} 

回答

2
int numStates; 
int numAlphabets; 
char nameOfAlphabets[numAlphabets]; 
char nameOfStates[numStates]; 

在這裏,你這是未初始化int S的導致段錯誤的陣列。將數組初始化移至各自的scanf之後,以便在創建數組之前對兩個int進行初始化。

char *transitionTable[numStates] [numAlphabets]; 

在兩個scanf之後移動上述行。

+0

哦!我很驚訝,我怎麼沒有看到錯誤! – aaa 2014-10-16 11:41:01

3
int numStates; 
int numAlphabets; 

char nameOfAlphabets[numAlphabets]; 
char nameOfStates[numStates]; 
char *transitionTable[numStates][numAlphabets]; 

這裏numAlphabetsnumStates是未初始化的。

移動scanf後的定義。

int numStates; 
    int numAlphabets; 

    // Read numStates 
    printf("Enter the number of STATES:"); 
    scanf("%d",&numStates); 

    // Read numAlphabets 
    printf("Enter the number of ALPHABETS: "); 
    scanf("%d", &numAlphabets); 

    char nameOfAlphabets[numAlphabets]; 
    char nameOfStates[numStates]; 
    char *transitionTable[numStates][numAlphabets]; 
+0

謝謝。你知道如何解決存儲字符串的問題嗎?它仍然不會返回字符串 – aaa 2014-10-16 11:45:30