3

I'm learning C, and I'm trying to make a basic calculator, but having some trouble with the while statements. I've tried doing it multiple ways but it never repeats itself, just finishes the script.

Any ideas?

//
//  main.c
//  Calculator
//
//  Created by Austen Patterson on 2013-06-27.
//  Copyright (c) 2013 Austen Patterson. All rights reserved.
//

#include <stdio.h>
#include <stdbool.h>

int main()
{
    int number[100];
    int operator = '0';
    int doAgainAnswer = '0';
    bool doAgain;
    do{ 
    printf("Please enter your first number:");
    scanf("%d", &number[1]);
    printf("\nYou entered %d as your first number. Please enter your second: ", number[1]);
    scanf("%d", &number[2]);
    printf("\nYou entered %d as your second number.", number[2]);
    printf("\nYour numbers are now %d and %d", number[1], number[2]);
    printf("\nNow enter your operator.\n1 for addition\n2 for subraction\n3 for multiplication\n4 for division.\n");
    scanf("%d", &operator);

    if(operator == 1){
        int finished = number[1] + number[2];
        printf("\n\n%d \+ %d is: %d", number[1], number[2], finished);

    }
    if(operator == 2){
        int finished = number[1] - number[2];
        printf("\n\n%d \- %d is: %d", number[1], number[2], finished);

    }
    if(operator == 3){
        int finished = number[1] * number[2];
        printf("\n\n%d \* %d is: %d", number[1], number[2], finished);

    }
    if(operator == 4){
        int finished = number[1] / number[2];
        printf("\n\n%d \/ %d is: %d", number[1], number[2], finished);
    }

        printf("\nWant to continue?\n 1 for Yes\n 2 for No\nAnswer: ");
        scanf("%d", &doAgainAnswer);
        if(doAgainAnswer == 1) {
          doAgain = '1';
        } else {
          doAgain = '0';

        }
    }while(doAgain == '1');
}
Saro Taşciyan
  • 5,210
  • 5
  • 31
  • 50
Austen
  • 283
  • 1
  • 4
  • 16
  • You should strongly consider using a switch case, rather than repeated if statements. http://msdn.microsoft.com/en-us/library/66k51h7a.aspx – Alexander Jun 09 '14 at 18:35

2 Answers2

5

Edited code

#include <stdio.h>
#include <stdbool.h>

int main()
{
    int number[100];
    int operator = '0';
    int doAgainAnswer = 0;//edited
    int doAgain=0;//edited
    do{ 
    printf("Please enter your first number:");
    scanf("%d", &number[1]);
    printf("\nYou entered %d as your first number. Please enter your second: ", number[1]);
    scanf("%d", &number[2]);
    printf("\nYou entered %d as your second number.", number[2]);
    printf("\nYour numbers are now %d and %d", number[1], number[2]);
    printf("\nNow enter your operator.\n1 for addition\n2 for subraction\n3 for multiplication\n4 for division.\n");
    scanf("%d", &operator);

    if(operator == 1){
        int finished = number[1] + number[2];
        printf("\n\n%d \+ %d is: %d", number[1], number[2], finished);

    }
    if(operator == 2){
        int finished = number[1] - number[2];
        printf("\n\n%d \- %d is: %d", number[1], number[2], finished);

    }
    if(operator == 3){
        int finished = number[1] * number[2];
        printf("\n\n%d \* %d is: %d", number[1], number[2], finished);

    }
    if(operator == 4){
        int finished = number[1] / number[2];
        printf("\n\n%d \/ %d is: %d", number[1], number[2], finished);
    }

        printf("\nWant to continue?\n 1 for Yes\n 2 for No\nAnswer: ");
        scanf("%d", &doAgainAnswer);
        if(doAgainAnswer == 1) {
          doAgain = 1;//edited
        } else {
          doAgain = 0;//edited

        }
    }while(doAgain == 1);//edited
return 0;//edited
}
Chetan Gawai
  • 2,361
  • 1
  • 25
  • 36
  • Did that but still not working. It continues the code now and doesn't finish it :P – Austen Jun 28 '13 at 05:06
  • Add statement return 0.I have tried it and it is running fine. – Chetan Gawai Jun 28 '13 at 05:07
  • I have added the following code to my continue question and it returns 1 every time. `printf("\nWant to continue?\n 1 for Yes\n 2 for No\nAnswer: "); scanf("%d", &doAgainAnswer); if(doAgainAnswer == 1) { doAgain = '1'; printf("doAgain saved as %d", doAgain); } else { doAgain = '0'; printf ("doAgain saved as %d", doAgain); } ` – Austen Jun 28 '13 at 05:12
  • There is another oversite in the code. the line: int operator = '0'; is setting operator = 0x30 hex, not 0x00 hex. Similar considerations can be given for the instances of '1' and '0' when looking for the exit condition. – user3629249 Jun 10 '14 at 08:00
2

Change the while Condition to

while(doAgain==1)

And in all the doAgain assingments, use 0 or 1.

Other way would be to use While(1) and break when user enters 0 at prompt in doAgainAnswer.

Lohit
  • 126
  • 8