getting a "invalid operands to binary"
I am getting this error in lines that involve "ch[_]" in lines 27, 28, 29, 33, 42, 43, 44, and 48, heres the code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
struct integer{
int* digits;
int size;
};
FILE *IFP;
//convert string to int array
struct integer* multiply(struct integer *p, struct integer *q){
struct integer *done = malloc(sizeof(struct integer));
struct integer *temp = malloc(sizeof(int) * 1000000000);
struct integer *ch = malloc(sizeof(char) * 1000000000);
done->digits = malloc(sizeof(int) * (done->size + 1));
int i = 0, j = 0, k = 0, d = 0, l1, l2;
long int carry = 0;
l1 = p->size - 1;
l2 = q->size - 1;
if (l1 >= l2){
for (i = l2; i >= 0; i--){
for (j = l1; j >= 0; j--){
ch[k] += (q->digits[i] * p->digits[j] + carry) % 10;
temp[k] = ch[k] % 10;
temp[k+1] = ch[k] / 10;
k++;
carry = (q->digits[i] * p->digits[j] + carry) / 10;
}
temp[k++] += carry;
carry = 0;
ch = temp;
d++;
k = d;
}
}else{
for (i = l1; i >= 0; i--){
for (j = l2; j >= 0; j--){
ch[k] += (q->digits[j] * p->digits[i] + carry) % 10;
temp[k] = ch[k] % 10;
temp[k+1] = ch[k] / 10;
k++;
carry = (q->digits[j] * p->digits[i] + carry) / 10;
}
temp[k++] += carry;
carry = 0;
ch = temp;
d++;
k = d;
}
}
done->digits = temp;
return done;
}
struct integer* convert_integer(char* stringInt){
struct integer *converted = malloc(sizeof(struct integer));
int length, i, *ints;
ints = (int *)malloc(10001 * sizeof(int));
length = strlen(stringInt);
converted->size = length;
for(i = length; i > 0; i--)
ints[i - 1] = (stringInt[length - i]-48);
converted->digits = ints;
return converted;
}
void print(struct integer *a){
int len = a->size;
int i, j;
for(i = 1000000000; i >= 0; i--){
if (a->digits[i] != 0){
for (j = i; j >= 0; j--){
printf("%d", a[j]);
}
break;
}
printf("\n");
}
}
int main(){
IFP = fopen("bigint.txt", "r");
char *num1, *num2;
num1 = (char *)malloc(10001 * sizeof(char));
num2 = (char *)malloc(10001 * sizeof(char));
struct integer *snum1 = malloc(sizeof(struct integer));
struct integer *snum2 = malloc(sizeof(struct integer));
struct integer *total = malloc(sizeof(struct integer));
int i, j, runs = 0;
fscanf(IFP, "%d", &runs);
printf("runs: %d\n", runs);
for (i = 0; i < runs; i++){
fscanf(IFP, "%s %s", num1, num2);
printf("Problem #%d: ", runs+1);
snum1 = convert_integer(num1);
print(snum1);
printf(" * ");
snum2 = convert_integer(num2);
print(snum2);
printf(" = ");
total = multiply(snum1, snum2);
//print(total);
}
free(snum1->digits);
free(snum1);
free(snum2->digits);
free(snum2);
fclose (IFP);
return 0;
}