我具有這樣的結構:
C不能添加新元素STRUCT
typedef struct kodProgramu {
char* etykieta;
char* instrukcja;
char* operand;
struct kodProgramu *nast;
} kodPrg;
該代碼可用於添加新的元素:
void pobierzKodStdin(kodPrg *kod, char *wynik, char *linia, int flagaEtyk)
{
wynik = fgets(linia, 80, stdin);
while(wynik != NULL)
{
kodPrg *wsk, *nowy;
wsk = kod;
while(wsk->nast != NULL)
wsk = wsk->nast;
if(linia[0] == ' ')
flagaEtyk = 1;
nowy = (kodPrg*)malloc(sizeof(kodPrg));
int licznik = 0;
char *pch;
pch = strtok(linia, ":# ");
while(pch != NULL)
{
if(flagaEtyk == 0)
{
if(licznik == 0)
nowy->etykieta = pch;
else if(licznik == 1)
nowy->instrukcja = pch;
else if(licznik == 2)
nowy->operand = pch;
}
if(flagaEtyk == 1)
{
if(licznik == 0)
nowy->instrukcja = pch;
else if(licznik == 1)
nowy->operand = pch;
}
licznik++;
pch = strtok(NULL, ":# ");
}
nowy->nast = NULL;
wsk->nast = nowy;
flagaEtyk = 0;
wynik = fgets(linia, 80, stdin);
}
}
此功能打印該結構到控制檯:
void wypiszKod(kodPrg *kod)
{
kodPrg *wsk = kod;
while(wsk != NULL)
{
printf("%s %s %s\n", wsk->etykieta, wsk->instrukcja, wsk->operand);
wsk = wsk->nast;
}
}
這是我的主要功能:
int main()
{
char linia[80], *wynik;
char *wsk = malloc(sizeof(char));
int flagaEtyk = 0;
//tasmaWejsc *wejscie = (tasmaWejsc*)malloc(sizeof(tasmaWejsc));
//tasmaWyjsc *wyjscie = (tasmaWyjsc*)malloc(sizeof(tasmaWyjsc));
//wyjscie->wartosc = 0;
//wyjscie->nast = NULL;
kodPrg *kod = (kodPrg*)malloc(sizeof(kodPrg));
kod->etykieta = " ";
kod->instrukcja = " ";
kod->operand = " ";
kod->nast = NULL;
int liczba;
//wprowadzWejscie(wynik, linia, wejscie);
//wypiszWejscie(wejscie);
//system("cls");
pobierzKodStdin(kod, wynik, linia, flagaEtyk);
wypiszKod(kod);
return 0;
}
現在,當我輸入一行如:測試測試測試 它運行良好,並在控制檯中打印測試測試測試。
但是,當我輸入更多的線,例如:
test test test
xxxx xxxx xxxx
該計劃是打印:
xxxx xxxx xxxx
xxxx xxxx xxxx
這就像第二行替換第一個。 我不知道爲什麼,當我有一個int而不是char *的結構,它工作良好。下一個元素被添加並且它的打印效果很好,但是當char *按照上面描述的方式工作時。
如何將新的elemnt添加到列表中,當我有char *結構?
請參閱http://stackoverflow.com/questions/12066046/array-of-structs-deleting-adding-elements-and-printing –
將源代碼(變量和函數名稱,註釋)完全保存在一個優點英語。實際上,它可以提高你的英語水平,並且提高了你的代碼的可讀性(除非你的英語真的很糟糕)。這是來自非英語母語的人,他認爲包含他的母語(德語)標識符的代碼看起來有些「破碎」。 – DevSolar
@DevSolar同意 - 雖然,'sofern(條件){...} widrigenfalls {...}有一定的魅力。 –