Продолжим совершенствование нашей программы. Пусть после того, как на экран выдан результат, программа не завершает свою работу, а спрашивает пользователя, не желает ли он продолжить складывать (вычитать, делить, умножать) числа. И пусть при получении утвердительного ответа работа программы продолжается - снова запрашиваются значения двух чисел и знак арифметической операции, вычисляется результат и так далее, до тех пор, пока пользователь не откажется от дальнейшей работы с программой, введя отрицательный ответ.
Заметим, что программу, выполняющую указанные действия, можно написать по-разному. Ниже приведен один из многих возможных вариантов:
#include <stdio.h> // включить описание стандартных функций ввода-вывода
main()
// пишем главную функцию, которая ..
{
// ... начинается ...
float x,y,z;
// ...с описания вещественных (float) переменных x, y, z
char s, a;
// и переменных s, a - типа char (символ).
once_again: //метку "once_again" помещаем здесь; за ней-двоеточие
printf(" input formula\n> ");
// выводится на экран подсказка
scanf("%f",&x); // считывается значение x,
scanf("%c",&s); // считывается значение знака: s,
scanf("%f",&y); // считывается значение y
if (s=='+') z=x+y; // если s равно "+", то z присваивается X+Y
if (s=='-') z=x-y;
// если s равно "-", то z присваивается X-Y
if (s=='*') z=x*y; // если s равно "*", то z присваивается X*Y
if (s=='/') z=x/y;
// если s равно "/", то z присваивается X/Y
printf(" %.2f %c %.2f = %.2f",x,s,y,z);
// пишем ответ
printf(" Continue(yes/no)? "); // вопрос пользователю: продолжить?(y/n), т.е. (да/нет)
a=getch();
// считываем ответ
if ((a=='y') || (a=='Y')) goto once_again; // переход на метку, если ответ положительный
}
// конец программы
В приведенной выше программе используется функция
getch(), которая возвращает символ, соответствующий нажимаемой пользователем клавише на клавиатуре. Таким образом, строке
a=getch() происходит присваивание символьной переменной
"a" значения введенного пользователем символа.
Этот вариант программы продемонстрирован, в основном, для иллюстрации оператора
goto <метка>,
передающего управление на строку программы, помеченной меткой.
В нашем случае <метка> определена как
"once_again", и если на вопрос программы "Continue(yes/no)?';" т.е. "продолжить(да/нет)?", пользователь ответит "y" или "Y" ( условие "или" записывается в виде двух вертикальных черт
"||": (a=='y') || (a=='Y')), то управление будет передано на строку, помеченную меткой
"once_again" (т.е. на строку printf(" input formula\n>
");).
Отметим, что отношение многих программистов к оператору
goto весьма отрицательно: доходит до того, что использование goto считается дурным тоном среди профессионалов и запрещается преподавателями к применению при написании программ студентами. И среди основных доводов против называют:
1) При частом использовании операторов goto и многочисленных меток в программе в них легко можно запутаться.
2) В современных языках программирования (в т. ч. в C/C++) достаточно средств организации переходов без применения
goto.
Однако мы не будем столь категоричны.
то же на Fortran то же на Basic то же на Pascal