Консультация № 142133
24.08.2008, 21:34
0.00 руб.
0 6 2
Здравствуйте эксперты, после выполнения программы через goto надо опять начать программу при нажатии определенной клавиши
на Паскале это выглядело бы наверно так:
readkey(s);
if s="q" then goto na4alo;
end.
как это все реализовать на Си
как описывать и пользоваться метками, и есть какой-нить аналог readkey?

Обсуждение

Неизвестный
24.08.2008, 22:00
общий
это ответ
Здравствуйте, Tribak!
В приложении аналог Вашего паскалевского кода, но, честное слово, не используйте метки. Это плохой стиль программирования, используется только в школьном Васике и в ассемблере

Приложение:
#include <conio.h>

int main() {
char s;
s = getch();
if (s == 'q') goto na4alo;
printf("Not 'q'\n");
na4alo:

return 0;
}
Неизвестный
24.08.2008, 22:05
общий
Да я ими не пользуюсь обычно, в Паскале я бы вообще в repeat всю программу включил и until на нажатие какой-нить кнопки, но тут в задании сказано что надо воспользоваться именно goto, а разве не надо заранее как-то обьявить метку?
давно
Старший Модератор
17042
808
24.08.2008, 22:55
общий
Так метка и объявлена так: na4alo:
Просто после неё надо написать операторы, заключённые в фигурные скобки {} (т.е. чего этот участок программы делает).
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
24.08.2008, 23:20
общий
тоесть, это уже функция или процедура получается, а надо чтобы выполнение программы перешло на определенную строчку кода как делается это в Паскале
Неизвестный
24.08.2008, 23:25
общий
типа
goto label;
begin
nachalo:
readln(X);
readln(y);
writeln(x+y);
write('хотете опять складывать или выйти из программы Да/Нет?');
readln(s);
if s='Д' then goto nachalo;
end.
замысел вот такой вот, увы но воспользоваться надо имеено меткой(прости за синтаксис, не проверял на ошибки)
давно
Старший Модератор
17042
808
25.08.2008, 07:56
общий
это ответ
Здравствуйте, Tribak!
goto обусловливает безусловный переход во время выполнения программы в то место, которое обозначено меткой. Синтаксис метки Имя_метки - двоеточие - фигурные скобки, внутри которых содержатся операторы. Основное отличие метки от функций (помимо синтаксиса):
1. Функция объявляется и вызывается в любом месте программы (объявляться может как вне, так и внутри главной функции main), в то время как метка - только в пределах главной функции main.
2. Операторы метки выполняются последовательно, один за другим, также как и прочие операторы программы, просто при использовании goto (переходе к метке) выполнение программы начинается заново с этого места.
Пример использования goto (на C++) см. в приложении.
Для считывания единичного символа в C++ используется объект cin, в чистом Си - функция getchar()

Приложение:
#include <iostream.h>
//-------------------------------------------------------
int main()
{
int x, y, s;
char a;

// Begin - метка суммирования
Begin:
{
cout << "x: ";
cin >> x;
cout << "y: ";
cin >> y;
s = x + y;
cout << "sum: " << s << endl;
}

cout << "Хотите продолжить? Введите ответ буквой (y / n): ";
cin >> a;
if(a == 'y') goto Begin;
return 0;
}
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Форма ответа