我有一個結構數組,在while循環內部添加東西到該數組,但是當我打印出數組時,我得到了錯誤的輸出? (添加的最後一個元素被打印出來n次,n是多少東西我加)全局數組在while循環內不更新?
我用Google搜索這一點,我認爲這是因爲在猛砸while循環創建一個子shell,也不太清楚。
任何幫助,將不勝感激 (請有耐心,我只是一個學生!)
使用Mac OSX山獅 的Xcode 4的gcc
代碼:
#include <stdio.h>
#include <limits.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
typedef struct{
char* one;
char* two;
} Node;
Node nodes[100];
int count = 0;
void add(char *one,char*two){
Node newNode = {one,two};
nodes[count]= newNode;
printf("one: %s\n",one);
printf("two: %s\n",two);
count++;
}
void print(){
int x;
for (x = 0; x < 10; x++)
printf("%d : (%s, %s) \n",x,nodes[x].one, nodes[x].two);
}
void check(char **arg)
{
if(strcmp(*arg, "Add") == 0)
add(arg[1],arg[2]);
else if(strcmp(*arg,"print") == 0)
print();
else
printf("Error syntax Enter either: \n Add [item1][item2]\n OR \n print\n");
}
void readandParseInput(char *line,char **arg)
{
if (fgets (line, 512, stdin)!= NULL) {
char * pch;
pch = strtok (line," \n\t");
int count = 0;
arg[0] = pch;
while (pch != NULL)
{
count++;
pch = strtok (NULL, " \n\t");
arg[count] = pch;
}
}else{
printf("\n");
exit(0);
}
}
int main()
{
int i;
for(i = 0;i <100; i++){
nodes[i].one = ".";
nodes[i].two = ".";
}
char line[512]; /* the input line */
char *arg[50]; /* the command line argument */
while (1)
{
readandParseInput(line,arg);
if(arg[0] != NULL)
check(arg);
}
return(0);
}
在malloc上閱讀。 – Oren 2013-04-11 13:04:13
如果你正確地縮進你的代碼,它會對你有很大的幫助。 – Shahbaz 2013-04-11 13:04:31
這與在bash和subshell中的循環無關。你的'nodes'是一個'Node'類型的數組,而不是'Node *',所以你不能'Node newNode = {one,two}; nodes [count] = newNode;'。 – Vicky 2013-04-11 13:05:17