簡體   English   中英

將字符串和字符存儲在二維數組中(C)

[英]storing string and characters in two dimensional array (C)

我正在嘗試編寫一個程序來模擬DFA。 我需要做的是從用戶那里獲取大量輸入並將其保存在兩個獨立的數組中(將其用作行和列),然后創建第三個數組(2d)作為第一個數組的值表兩個數組。

例如:array2 = {a,b} array1 = {q1,q2,q3} array [array1] [array2] =(下表)

  a   b 

========

Q1 | v1 v2

Q2 | v3 v4

Q3 | v5 v6

問題:

1)我無法將字符串q1,q2,q3 ...保存在數組中

2)第二個數組值以某種方式覆蓋了第一個數組值,(也許是因為我使用與其計數器相同的變量?如果我更改了第二個循環的計數器變量,則會產生分段錯誤

如果有人能指出我做錯了哪一部分,那就太好了。

編輯:分割問題已解決,這要歸功於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);
}
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];
 int numStates;
 int numAlphabets;
 char nameOfAlphabets[numAlphabets];
 char nameOfStates[numStates];  

在這里,您正在制作未初始化的int數組,這些數組會導致分段錯誤。 將數組初始化移動到相應的scanf之后,以便在創建數組之前將兩個int初始化。

char *transitionTable[numStates] [numAlphabets];

在兩次scanf之后將上面的行移動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM