Я должен создать программу, которая решает следующую схему ворот.Однако во время выполнения программы что-то идет не так, потому что мне предлагается ввести восемь раз вместо шести.Пожалуйста, предоставляйте только те решения, которые связаны с изменениями в основной функции, а не с другими.
Вот схема схемы, которую я должен решить:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int (*CallBack)(int, int);
typedef struct gate {
CallBack f;
struct gate * in1 ;
struct gate * in2 ;
} Gate;
int getinput() {
int x;
scanf("%d", &x);
return x;
}
int myand (int a, int b) {
return a * b;
}
int myor (int a, int b) {
return a + b>0;
}
int mynand (int a, int b) {
return !(a * b);
}
int mynor (int a, int b) {
return a + b<=0;
}
int myxor (int a, int b) {
return a!=b;
}
Gate * creategate(CallBack f) {
Gate * temp ;
temp = malloc(sizeof (Gate));
temp->f = f;
temp->in1 = NULL;
temp->in2 = NULL;
return temp;
}
int eval(Gate *x) {
int a, b;
if (x->in1 != NULL)
a = eval(x->in1);
if (x->in2 != NULL)
b = eval(x->in2);
if (x->in1==NULL && x->in2 == NULL)
return (x->f)(0,0);
else
return (x->f)(a,b);
}
int main( ) {
Gate * gate1_ptr, * gate2_ptr, * gate3_ptr, * gate4_ptr, * gate5_ptr, * gate6_ptr;
Gate * a_ptr, * b_ptr, * c_ptr, * d_ptr, * e_ptr, * f_ptr;
gate1_ptr = creategate(mynor);
gate2_ptr = creategate(myand);
gate3_ptr = creategate(myor);
gate4_ptr = creategate(mynand);
gate5_ptr = creategate(myxor);
gate6_ptr = creategate(myor);
printf("Enter six inputs, split by enter:\n");
a_ptr = creategate(getinput);
b_ptr = creategate(getinput);
c_ptr = creategate(getinput);
d_ptr = creategate(getinput);
e_ptr = creategate(getinput);
f_ptr = creategate(getinput);
gate1_ptr->in1 = a_ptr;
gate1_ptr->in2 = b_ptr;
gate2_ptr->in1 = c_ptr;
gate2_ptr->in2 = d_ptr;
gate3_ptr->in1 = e_ptr;
gate3_ptr->in2 = f_ptr;
gate4_ptr->in1 = gate1_ptr;
gate4_ptr->in2 = gate2_ptr;
gate5_ptr->in1 = gate2_ptr;
gate5_ptr->in2 = gate3_ptr;
gate6_ptr->in1 = gate4_ptr;
gate6_ptr->in2 = gate5_ptr;
printf("%d", eval(gate6_ptr));
return 0;
}