Если вы хотите, чтобы программа всегда отображала самое высокое введенное число, которое меньше случайного числа («больше чем»), и самое низкое введенное число, которое больше случайного числа («меньше чем»), то ваша программа необходимо запомнить эти два числа, чтобы он мог обновлять и печатать их по мере необходимости.
В функции main
вы можете объявить следующие два целых числа:
int bigger_than, smaller_than;
Эти переменные должны go войти в функцию main
, потому что эти числа должны запоминаться на протяжении всей программы. Функция main
является единственной функцией, которая выполняется для всей программы, все остальные функции работают только в течение короткого времени. Альтернативой было бы объявить эти две переменные глобальными. Однако это считается плохим стилем программирования.
Эти переменные, разумеется, должны будут обновляться, когда пользователь вводит новое число.
Эти два целых числа должны быть переданы в функцию output
каждый раз, когда она вызывается, увеличивая количество параметров этой функции с 2 до 4.
Если вы хотите, чтобы счетчик подсчитывал количество введенных чисел, вам также придется запомнить это значение в функцию main (или как глобальную переменную) и передайте ее функции output
. Это увеличит количество параметров для функции до 5.
Если вы не хотите передавать столько параметров для вывода, вы можете объединить содержимое функций output
и input
в function main
.
Однако в любом случае вам придется переместить большую часть «меньше чем» и «больше чем» logi c из функции output
в функцию main
, потому что эти логические значения c необходимы для изменения новых переменных типа "large_than" и "less_than", которые принадлежат функции main. Функция output
должна содержать только фактические логи печати c.
Хотя технически возможно изменить эти две переменные, которые принадлежат функции main
, внутри функции output
, я полагаю не рекомендую, потому что это станет грязным. Вам потребуется передать несколько указателей на функцию output
, что позволит этой функции изменять переменные, принадлежащие функции main
.
. Теперь я написал свое собственное решение и обнаружил, что это гораздо проще написать, объединив функцию output
в main
. Я также объединил все остальные функции в main
, но это было не так важно, как объединение функции output
.
Вот мой код:
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#pragma warning (disable : 4996)
int main()
{
const char *ordinals[4] = { "st", "nd", "rd", "th" };
int num_tries = 0;
int bigger_than = 0, smaller_than = 101;
int input_num;
int random_num;
srand( (unsigned int)time( NULL ) );
random_num = 1 + rand() % 101;
for (;;) //infinite loop, equivalent to while(1)
{
printf( "Bigger than: %d, Smaller than: %d\n", bigger_than, smaller_than );
printf( "enter a number: " );
scanf( "%d", &input_num );
printf( "You entered: %d\n", input_num );
num_tries++;
if ( input_num == random_num ) break;
if ( input_num < random_num )
{
if ( bigger_than < input_num )
{
bigger_than = input_num;
}
}
else
{
if ( smaller_than > input_num )
{
smaller_than = input_num;
}
}
}
printf( "You got it right on your %d%s try!", num_tries, ordinals[num_tries<3?num_tries:3] );
return 0;
}
Также я удостоверился, что программа напечатает «1-й», «2-й» и «3-й», тогда как все другие решения просто напечатают «1-й», «2-й», «3-й». Для этого я использовал условный оператор c ++.