I am implementing a polynomial using array. This is the Problem Statement:
Write a menu-driven program to represent Polynomials as a data structure using arrays. and write functions to add, subtract and multiply two polynomials; multiply a polynomial with a constant, find whether a polynomial is a "zero- polynomial, return the degree of the polynomial. Assume that a new polynomial is created after each operation. How would you input and output polynomials?
I have created the input and output functions. But my do while loop is running twice.. Help me finding out why.
The do-while loop
do{
        print_menu();
        scanf("%c",&ch);
        printf("\nch = %c\n",ch);
    switch(ch){
        case '1':
            create_poly(poly,termpool,&next_poly);
            break;
        case '2':
            print_poly(poly,termpool,&next_poly);
            break;
        case 'q':
            break;
        default:
            printf("Invalid choice.");
    }
}while(ch != 'q');
return 0;
}
The print_menu() function
void print_menu()
{
    printf("\n1. Create a new polynomial.");
    printf("\n2. Print polynomial.");
    printf("\nq. Exit");
    printf("\nEnter Choice:");
}
The create_poly() function
void create_poly(int poly[][2], int termpool[][2], int *next_poly)
{
    int beg = poly[*next_poly][0];
    int end, size, i, j;
    printf("Enter size of the polynomial:");
    scanf("%d",&size);
    poly[*next_poly][1] = beg + size - 1;
    end = poly[*next_poly][1];
    printf("Enter terms of the polynomial(coeff then exponent):\n");
    for(i=beg; i<=end; i++){
        for(j=0; j<2; j++){
            scanf("%d ",&termpool[i][j]);
        }
    }
    poly[++(*next_poly)][0] = end + 1;
}
The print_poly() function
void print_poly(int poly[][2],int termpool[][2],int *next_poly)
{
    int pos,beg,end;
    int i;
    printf("Enter position of the polynomial:");
    scanf("%d",&pos);
    if(pos-1 > *next_poly){
        printf("Invalid position.");
        return;
    }
    beg = poly[pos-1][0];
    end = poly[pos-1][1];
    for(i=beg; i<=end; i++){
        printf(" %dx^%d +",termpool[i][0],termpool[i][1]);
    }
    printf("\b = 0");
}
Here is a sample output:
1. Create a new polynomial. 2. Print polynomial. q. Exit Enter Choice:1 ch = 1 Enter size of the polynomial:2 Enter terms of the polynomial(coeff then exponent): 2 4 6 7 1. Create a new polynomial. 2. Print polynomial. q. Exit Enter Choice: ch = Invalid choice. 1. Create a new polynomial. 2. Print polynomial. q. Exit Enter Choice:q ch = q
Tried flushing the stdin… The problem stays. Printing the value of ch in each step, I think it is a whitespace. Where does the white space comes?
The answer to abnormal behavior of scanf answers this question also.
 
     
     
    