2013-06-30 4 views
0

Привет, я знаю, что уже существует вопрос о случайном генераторе в пределах диапазона, но я этого не понимаю. Я новичок в C, и я знаю только java. В этой программе я пытаюсь создать математического репетитора в C. Программа будет произвольно генерировать два числа от 1 до 10 и оператор. Он работает, но не показывает следующую строку, и он продолжает показывать неправильный ответ. Кроме того, почему VS2010 говорит, что getch() не определено? Вот код:Случайный генератор в пределах диапазона

int ans; 
int ans1; 
int num1 = rand() % 10 + 2; 
int num2 = rand() % 10; 
int operation = rand() % 4; 

    printf("\tMATH TUTOR\n"); 
    if(operation == 1){ 
     printf("What is %d + %d ?", num1, operation, num2); 
     scanf_s("%d",ans1); 
     ans = num1 + num2; 
     if(ans != ans1){ 
      printf("Incorrect! Try Again!"); 
      do{ 
       scanf_s("%d", &ans1); 
      }while(ans != ans); 
     }else{ 
      printf("Correct!"); 
     } 
     }else if(operation == 2){ 
      printf("What is %d - %d ?", num1, operation, num2); 
      scanf_s("%d",&ans1); 
      ans = num1 - num2; 
      if(ans != ans1){ 
       printf("Incorrect! Try Again!"); 
       do{ 
        scanf_s("%d", &ans1); 
       }while(ans != ans); 
      }else{ 
       printf("Correct!"); 
       } 
     }else if(operation == 3){ 
      printf("What is %d * %d ?", num1, operation, num2); 
      scanf_s("%d",&ans1); 
      ans = num1 * num2; 
      if(ans != ans1){ 
       printf("Incorrect! Try Again!"); 
       do{ 
        scanf_s("%d", &ans1); 
       }while(ans != ans); 
      }else{ 
       printf("Correct!"); 
      } 
      }else if(operation == 4){ 
       printf("What is %d/%d ?", num1, operation, num2); 
       scanf_s("%d",&ans1); 
       ans = num1/num2; 
       if(ans != ans1){ 
        printf("Incorrect! Try Again!"); 
        do{ 
         scanf_s("%d", &ans1); 
        }while(ans != ans); 
       }else{ 
        printf("Correct!"); 
       } 
      } 

    getch(); 
    return 0; 
} 

ответ

0

С вашим кодом связано несколько проблем, которые, вероятно, заставят его работать по-другому, как вы ожидаете.

Вы тест для работы значений 1 по 4 операции присваивается это значение из RAND()% 4. Это означает, что операция будет только когда-либо иметь значение от 0 до 3.

Ваших делать, пока петли у всех есть тот же недостаток. Они проверяют ans! = Ans, тогда как вы должны тестировать ans! = Ans1.

Устраните эти проблемы, и вы получите немного дальше.

EDIT, чтобы дать вам лучший намек

if(operation == 1){ 
    printf("What is %d + %d ?", num1, num2); 
    scanf_s("%d",ans1); 
    ans = num1 + num2; 
    if(ans != ans1){ 
     do{ 
      printf("Incorrect! Try Again!"); 
      scanf_s("%d", &ans1); 
     }while(ans != ans1); 
    } 
    printf("Correct!"); 
} 

Редактировать, чтобы показать использование srand

int ans; 
int ans1; 
srand((unsigned int)time(NULL)); //I've included your (unsigned int) cast. 
int num1 = rand() % 10 + 2; 
int num2 = rand() % 10; 
int operation = rand() % 4; 
+0

Я изменил его, но случайный генератор работает неправильно. Это как установить диапазон на случайный генератор? int operation = rand()% 4 + 1 – eLg

+0

Да, это сработает. Однако в вашем коде есть и другие проблемы. Посмотрите на свои распечатки. Ваш код - printf («Что такое% d +% d?», Num1, операция, num2); У вас есть% d + (оператор)% d. Но вы указываете три аргумента ... num1, operator, num2. Вы должны удалить оператора из этого списка. –

+0

спасибо. У меня есть проблема, хотя всякий раз, когда я запускаю программу, она продолжает показывать 2 * 8, и когда я набираю правильный ответ, он продолжает показывать неправильную попытку снова. – eLg

1

Добавление Джона Шеридана: getch() является нестандартным расширением С, был добавлен многими компиляторами MS-DOS. Обычно это определялось в <conio.h>. Я не знаю, поддерживает ли VS2010 это по умолчанию.

+0

он работает, спасибо. – eLg

Смежные вопросы