Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.63
lqazxsazl
2 / 2 / 0
Регистрация: 22.06.2011
Сообщений: 42
#1

Как повторить программу - C++

23.06.2011, 00:02. Просмотров 6341. Ответов 45
Метки нет (Все метки)

Как сделать чтоб если я с клавиатуры в консоли введу "y" программа повторилась а если "n" то завершилась?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2011, 00:02     Как повторить программу
Посмотрите здесь:

C++ [C/C++]Компилятор g++.Странности с true и false.Кто нибудь может прокомментировать/повторить это у себя?
C++ Возможность повторить расчет с новыми данными не выходя из программы.
Препод задал повторить сервис на с++ C++
Если длина строки меньше заданной, то повторить ввод C++
C++ повторить введенные символы, за исключением десятичных символов
Повторить исполнение кода C++
Функция, в которой повторить алгоритм любой сортировки n раз C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
23.06.2011, 13:21     Как повторить программу
  #21

Не по теме:

Цитата Сообщение от asics Посмотреть сообщение
Я не забуду.
Спс. Поржал.
Большую программу не просто невозможно запомнить, этого не нужно!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
23.06.2011, 13:43     Как повторить программу #22
Цитата Сообщение от Deviaphan Посмотреть сообщение
Спс. Поржал.
ОМГ, еще один. Все ? Поржал ? Молодец.

Добавлено через 13 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
Большую программу не просто невозможно запомнить, этого не нужно!
И позволь я сам буду решать что мне нужно запоминать, а что нет, okda
Deviaphan
23.06.2011, 13:48
  #23

Не по теме:

Позволяю. Не мне с этим жить.)

asics
23.06.2011, 14:03
  #24

Не по теме:

Благодарствую.

easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
23.06.2011, 14:22     Как повторить программу #25

Не по теме:

Цитата Сообщение от lqazxsazl Посмотреть сообщение
Попробовал вот так но программа закрывается в любом случае.
Может память в компе битая? У меня работает...



C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void){
    char ch;
 
    do {
        printf("Do some job...\n");
        printf("continue? (y/n): ");
    } while ( scanf("%c%*c", &ch) == 1 && ( ch == 'y' || ch == 'Y' ) );
 
    return 0;
}
Как повторить программу

Цитата Сообщение от accept Посмотреть сообщение
эта штука на два перевода строки реагирует, чего не должно быть
%с считывает любой символ
эта штука считывает введённую букву и пропускает символ '\n', следующий за ней в потоке, иначе только один раз сработало бы.

 Комментарий модератора 
asics, Deviaphan, обстановку не нагнетаем...
lqazxsazl
2 / 2 / 0
Регистрация: 22.06.2011
Сообщений: 42
23.06.2011, 16:32  [ТС]     Как повторить программу #26
Уф уф уф короче та же хрень при любом раскладе закрывается. Вот код на котором ставлю эксперименты кто нибудь попробуйте заработает у вас или нет отпишитесь если да.
Программа решает квадратное уравнение надо ввести 3 числа.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream> 
#include <windows.h> 
#include <math.h> 
#include <stdio.h>
using namespace std; 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
          char ch;
do {
   cout << "Введите a, b, c" << endl;
    int a, b, b2, c, d, x1, x2, y;
    cin >> a;
    cin >> b;
    cin >> c;
    y = 2;
    b2 = pow(b,y);
    d = b2-(4*a*c); 
    cout << "d=" << d << endl;
    x1 = (-(b)+(sqrt(d)))/(2*a); 
    x2 = (-(b)-(sqrt(d)))/(2*a); 
           if (d>0) 
    cout << "d>0 Два корня." << endl;
        else
    cout << "d<0 Нет решений" << endl;
    cout << "Ответ:" << endl;
    cout << "x1=" << x1 << endl;
    cout << "x2=" << x2 << endl;
    printf("Do some job...\n");
                printf("continue? (y/n): ");
        } while ( scanf("%c%*c", &ch) == 1 && ( ch == 'y' || ch == 'Y' ) );
         return 0;
}
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
23.06.2011, 18:50     Как повторить программу #27
вот так переспрашивает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream> 
#include <windows.h> 
#include <math.h> 
#include <stdio.h>
using namespace std; 
int main(void){
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char ch;
    do {
        cout << "Введите a, b, c" << endl;
        int a, b, b2, c, d, x1, x2, y;
        cin >> a;
        cin >> b;
        cin >> c;
        y = 2;
        b2 = pow(b,y);
        d = b2-(4*a*c); 
        cout << "d=" << d << endl;
        x1 = (-(b)+(sqrt(d)))/(2*a); 
        x2 = (-(b)-(sqrt(d)))/(2*a); 
        if (d>0)
            cout << "d>0 Два корня." << endl;
        else
            cout << "d<0 Нет решений" << endl;
        cout << "Ответ:" << endl;
        cout << "x1=" << x1 << endl;
        cout << "x2=" << x2 << endl;
        cout << "continue? (y/n): ";
        cin.ignore(1024, '\n');
        cin >> ch;
    } while ( ch == 'y' || ch == 'Y'  );
    
    return 0;
}
Но программа по сути всё равно не правильно написана - при отрицательном дискриминанте выведет или случайные числа, или результаты предыдущих вычислений, если они были. Да и с приведением int к double и обратно тоже смело... А это ничего, что дробные части результатов будут отбрасываться? И кстати, при нулевом дискриминанте уравнение имеет одно решение - этот случай вообще никак не предусмотрен...
lqazxsazl
2 / 2 / 0
Регистрация: 22.06.2011
Сообщений: 42
23.06.2011, 19:17  [ТС]     Как повторить программу #28
Ну по поводу что она не до конца правильная я не великий программист я только учусь , а про дискриминант равен 0 я хотел учесть но пока не придумал как. Только учу c++ это так для закрепления ввода вывода итд......
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
23.06.2011, 19:24     Как повторить программу #29
Строго говоря, решений всегда 2. Просто при нулевом дискриминанте одинаковые, а при отрицательном комплексно-сопряжённые. Но автор задания может и не оценить
Учесть так же как и для 2 корней: сравнивать с нулём. Будет цепочка if {...} else if {...} else {...} Только вывод корней надо внутрь условий внести.
Ну и действительно непонятно, почему переменные для вещественных чисел объявлены как int.
lqazxsazl
2 / 2 / 0
Регистрация: 22.06.2011
Сообщений: 42
23.06.2011, 19:30  [ТС]     Как повторить программу #30
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну и действительно непонятно, почему переменные для вещественных чисел объявлены как int.
Ну потому что я учу с++ 3 день и книги по с++ помогают не очень путаю еще...........
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
23.06.2011, 19:32     Как повторить программу #31
Мы, одинокие стареющие мужчины, делаем так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h> 
#include <conio.h> 
int main () {
 char per= 'y';;
 while (per== 'y'|| per== 'Y') {
  printf ("prodolzhit?\n");
  do {
   per= getch ();
  }
  while (per!= 'y'&&per!= 'Y'&&per!= 'N'&&per!= 'n');
 }
 return 0;
}
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
23.06.2011, 22:38     Как повторить программу #32
Цитата Сообщение от lqazxsazl Посмотреть сообщение
путаю еще...
ну тогда постарайтесь запомнить:
char (character) - символьный тип данных, собственно для хранения символов в основном и используется.
int (integer) - целочисленный тип данных. Подходит для хранения индекса в массиве, календарного числа, месяца или года, количества учащихся в классе (был, помню, старый мультик, там у ученика в задаче 1 1/2 землекопа получилось), etc...
float (floating point) - вещественный тип "обычной" точности. Служит для хранения десятичных дробей. Примечателен тем, что совершенно непредсказуемо порой округляет хранимые значения. Использовать можно разве, что при серьёзной необходимости экономить память, пусть даже в ущерб точности.
double (double precision floating point) - вещественный тип "двойной" точности. Тот самый тип данных, который в большинстве случаев нужно использовать для хранения вещественных чисел.
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.06.2011, 02:09     Как повторить программу #33
Цитата Сообщение от easybudda
эта штука считывает введённую букву и пропускает символ '\n
эта штука реагирует на два пробела, как на ввод буквы, потому что спецификатор %c отличается от %s
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.06.2011, 02:34     Как повторить программу #34
Цитата Сообщение от accept Посмотреть сообщение
while (1) - стиль новичков
а что
C
1
for(;;)
тру?
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.06.2011, 03:12     Как повторить программу #35
это точно такие же break
одно дело, когда ты ставишь бесконечный цикл, когда без этого не обойтись, а другое - когда ты ставишь бесконечные циклы, расчитывая на break'и, потому что так проще по логике, и типа "не надо продумывать качественное условие выхода"

нужен один вход и один выход, тогда любые внутренние изменения цикла не затрагивают его ход
чего не скажешь про break'и, которые чуть что, надо сразу переписывать, или вообще переставлять местами, причём все
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.06.2011, 06:08     Как повторить программу #36
Цитата Сообщение от accept Посмотреть сообщение
которые чуть что, надо сразу переписывать, или вообще переставлять местами, причём все
о_0 С какого перепугу?
Разумеется, гораздо удобнее напихать в цикле кучу ифов, проверяющих на каждой итерации цикла необходимость выполнения кода, находящегося после изменения флага завершения. Ну и что, что цикл потенциально бесконечный и лишний (даже один) иф приравнивается к бесконечной потери времени... Кому какое дело, ведь break так внезапно код прерывает, что даже деструкторы от удивления не вызываются, глобальное потепление начинается и пингвины подняться не могут...
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
24.06.2011, 10:08     Как повторить программу #37
break - это jmp из выхода за условие цикла кто-то думает что когда цикл прервётся ниже его код выпониться это особенно новички так break на ASM кидает за цикл метку. Два цикла ни чем друг от друга не отличаются.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    while(1) {
            
        printf("input word: ");
        char buff[32];
        scanf("%s", buff);
        if(! stricmp(buff, "exit"))
            break;
 
        printf("\tprint: %s\n", buff);
 
    }
 
    // здесь goto
 
    while(1) {
 
                      printf("input word: ");
        char buff[32];
        scanf("%s", buff);
        if(! stricmp(buff, "exit"))
            goto  jmp;
            
        printf("\tprint: %s\n", buff);
 
    }
jmp:   ;
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
24.06.2011, 14:02     Как повторить программу #38
Цитата Сообщение от accept Посмотреть сообщение
эта штука реагирует на два пробела, как на ввод буквы
Ну хорошо. Конструкция
C
1
scanf("%c%*c", &ch);
читает из потока ввода два символа (вернее пытается прочитать). Первый прочитанный присваивает переданной переменной, а второй просто отбрасывает. В качестве учебного примера (учитывая уровень ТС) вполне достаточно. Но. Если мы решим почувствовать себя кулхацкерами, или кем-то вроде, и захотим взломать этот код, то начинать, конечно, нужно с добавления кучи пробелов после буквы 'y'...


xAtom, я думаю, основная идея в том, чтобы внутри тела цикла небыло заморочек по поводу им (циклом) управления, кроме, разумеется, случаев аварийного завершения. Кстати, в принципе согласен. Тело цикла - одна история, а сколько раз и при каких условиях это тело должно отработать - совсем другая...
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.06.2011, 05:38     Как повторить программу #39
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C
1
scanf("\t%c%*c", &ch);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2011, 09:58     Как повторить программу
Еще ссылки по теме:

C++ Как прочитать первую строку из файла а остальной текст повторить несколько раз?
Повторить исходный текст в файлах дважды, причем вторая копия должна содержать символы в обратном порядке C++
C++ Повторить последний минимальный элемент массива
Повторить строку вектора несколько раз C++
C++ Возможно ли как-то перехватить действия процесса и повторить их?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
25.06.2011, 09:58     Как повторить программу #40
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(void){
    char ch;
    
    while ( scanf("\t%c%*c", &ch) == 1 )
        printf("%#x\n", (unsigned)ch);
    
    return 0;
}
тот же
Как повторить программу
только в профиль...
Yandex
Объявления
25.06.2011, 09:58     Как повторить программу
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru