我正在尝试编写自己的图灵机。我的程序使用两个文件作为参数:我的机器必须使用的初始磁带和一个规则文件。该规则文件每行包含一个规则,每个规则是五个整数:当前状态,找到的符号,新符号,磁头行进方向和新状态。为此,我有一个函数可以读取我的文件,并将找到的每5个字符集放入int
规则结构中。然后生成这些结构的数组。
我正在尝试做的是返回此数组,以便以后可以使用它。这是我所拥有的:
struct rule {
int cur_state;
int symbol;
int new_symbol;
int direction;
int new_state;
};
typedef struct rule rule;
struct vect {
int nb_elem;
rule *p;
};
vect rule_generator (char * file_rule){
int line_number = 0;
int ligne;
char tmp;
rule rule_list[line_number];
vect output_rules;
FILE * file;
file = fopen(file_rule, "r");
for(tmp = getc(file); tmp != EOF; tmp = getc(file)){
if ( tmp == '\n')
line_number++;
}
output_rules.p = malloc(line_number*sizeof(rule));
assert(output_rules.p);
output_rules.nb_elem = line_number;
for (ligne = 0; ligne < line_number; ligne++ ){
fscanf(file, "%d %d %d %d %d", &rule_list[ligne].cur_state,
&rule_list[ligne].symbol, &rule_list[ligne].new_symbol,
&rule_list[ligne].direction, &rule_list[ligne].new_state);
}
fclose(file);
return output_rules;
}
int main (int argc, char *argv[]){
vect rule_list = rule_generator(argv[2]);
printf("symbole : %ls \n", &rule_list.p[0].symbol);
return 0;
}
正如您中某些人已经猜到的那样,它无法打印任何内容...我已经摸了一段时间,试图访问我的阵列。我真的可以在这里用一只手!
这里的问题很少。
您正在声明大小为0的数组。
int line_number = 0; rule rule_list[line_number];
您不需要rule_list
将其删除。
output_rules
initilized
除了内存分配之外没有其他地方。
解:
我建议你使用output_rules
的fscanf
。
for (ligne = 0; ligne < line_number; ligne++ ){
fscanf(file, "%d %d %d %d %d", &output_rules.p[ligne].cur_state,
&output_rules.p[ligne].symbol, &output_rules.p[ligne].new_symbol,
&output_rules.p[ligne].direction, &output_rules.p[ligne].new_state);
}
您是否还想打印的值symbol
?
当您使用时%ls
,习惯了wchar_t *
。
printf("symbole : %ls \n", &rule_list.p[0].symbol);
应该
printf("symbole : %d \n", rule_list.p[0].symbol);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句