#1
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char t[100];
f:
cin>>t;
if( stricmp(t,"")==0) {goto f;}
}
простейший код на С++ - вроде всё красиво и просто, далее...
(кстати, спросите тем времен у Васи - писал ли он, что-нибудь сложнее, чем пример №1)
#2
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
int a=1;
int b=2;
bool key=1;
if(key==1){goto f;}
int x=a;
a=b;
b=x;
f:
cout<<a<<" "<<b;
}
Данный пример чуть по-сложнее. Если флаг key не равен 1 - поменять значения переменных a и b местами.
И как Вы думаете: что скажет нам MSVC++?
error C2362: initialization of 'x' is skipped by 'goto f'
see declaration of 'x'
Error executing cl.exe.
1 error(s)
|
Т.е. временную переменную X необходимо закинуть повыше - до вызова оператора ГоТо. Теперь становится понятно, откуда у Васи Pascal`евские замашки инициализировать всё в одном месте.
Теперь представьте - такие танцы с временными переменными в большой программе...
Ещё, я обмолвился о понимании логики программы - так вот. Как описать процесс наполнения ведра водой "до краёв"?
Нормальный человек:
"Наливать, пока ведро не наполнится на 100%"
while get_p(vedro)!=100
dobavit_vodi(vedro)
wend
|
или
"Наливать пока не останется не занятого объёма"
while 100-get_p(vedro)>0
dobavit_vodi(vedro)
wend
|
ну или даже
"Наливать воду. Если ведро полное - прекратить"
while true
dobavit_vodi(vedro)
if get_p(vedro)==100 exit
wend
|
Логика с ГоТо:
"Налить воды. Если оно не полное то, повторить последнее действие"
|
Про многоступенчатые переходы, которые иначе как кошмарным сном не назовёшь, я вообще промолчу - представьте хотя бы, что каждому циклу Вы присваиваете уникальное имя. А блок-схема на готоах - это вообще абстракционизм.
Вчера ты был за goto,
сегодня - против функций
завтра - против массивов и типов
послезавтра - против мат.операций