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

Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" - C++

Восстановить пароль Регистрация
 
Nezgibaem
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 9
28.03.2014, 22:25     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #1
Доброго времени суток.
Прошу помочь в решении поставленного передо мной вопроса.
Суть: Нужно написать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" (не важно какая это будет кнопка, может быть любая другая). Я написал кое-что, но это работает неправильно - программа основана на цикле While. Первый проход она делает как положено, а вот после выпадает ошибка. Я ввожу требуемый символ и нажимаю enter, и вот этот самый энтер она тоже воспринимает как символ, и прогоняет цикл столько раз, сколько символов я ввел + клавиша энтер. Т.е. прогоняет совсем неуправляемо, не реагируя ни на какие команды ввода с клавиатуры, но выполняя прочее тело цикла, а если поместить в это тело прочую программу, которая тоже требует своего ввода входных данных, то получается настоящий кошмар. Помогите пожалуйста с этим справится и написать нормальную программу


Просьба к библиотекам просто так не цепляться, я знаю что тут несколько лишних библиотек, просто я оставил после предыдущих экспериментов
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
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include "stdio.h"
//#include <fstream.h>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "");
    char m,i;
    int v,t;
    i=0;
    v=0;
    m=NULL;
    do
    {
        
        v=v+1;
        printf("Хотите продолжить \n v = %d ",v);
        if(m=='\n')
        scanf("%c",&i);
        else
        scanf("%c",&m);
        
    }
    while(m!='y'||i!='y');
    
        //getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2014, 22:25     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y"
Посмотрите здесь:

C++ Выполнение цикла до тех пор, пока не будет нажата определенная клавиша
Вводить с клавиатуры числа до тех пор, пока не будет нажата клавиша <<ESC>> C++
Запрашивать у пользователя строки до тех пор, пока он не введет строку "Все" C++
C++ Создать ф-ию,печатающую таблицу квадратов чисел от 1 до тех пор,пока квадрат числа не превысит значения предела,переданного в ф-ию в кач-ве параметра
Cчитывать строку в консоли до тех пор пока не встретится точка. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programmist99
20 / 20 / 7
Регистрация: 18.03.2014
Сообщений: 281
28.03.2014, 22:38     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int main()
{
    char ch;
    for(;;)
    {
    cin>>ch;
    if(ch == 'y')
    {
        return 0;
    }
}
}
программа будет работать пока не будет нажата y
zer0mail
2189 / 1872 / 187
Регистрация: 03.07.2012
Сообщений: 6,665
Записей в блоге: 1
28.03.2014, 22:48     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #3
Программа будет ждать нажатия клавиш. Вряд ли это то, что нужно ТС.
programmist99
20 / 20 / 7
Регистрация: 18.03.2014
Сообщений: 281
28.03.2014, 22:52     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #4
зачем усложнять себе работу, красный крестик нам на что)
Байт
 Аватар для Байт
14004 / 8835 / 1234
Регистрация: 24.12.2010
Сообщений: 16,014
28.03.2014, 22:56     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #5
Цитата Сообщение от zer0mail Посмотреть сообщение
Программа будет ждать нажатия клавиш
Тут надо что-то вроде kbhit, но она, кажись, есть не повсюду. Хотя в conio.h должна быть
Nezgibaem
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 9
28.03.2014, 23:41  [ТС]     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #6
Я переделал текст программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "");
    char m,i;
    int v,t;
    i=0;
    v=0;
    m=NULL;
    do
    {
        
        v=v+1;
        printf("Хотите продолжить \n v = %d ",v);
        scanf("%s",&m);
        
    }
    while(m!='y');
    
        //getch();
}
Я убрал ифы и поставил переменную как массив символов, но получил проход цикла всего 1 раз и по завершении цикла(верное завершение, т.е. закрылась только при нужной клавише) ошибку ниже:
Run-Time Check Failure #2 - Stack around the variable 'm' was corrupted.

Может быть я не знаю какого нибудь свойства while? Я очевидно упускаю что-то важное, но докопаться до этого не получается - об этом нигде не написано.
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
29.03.2014, 00:02     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #7
странно - у меня нормально работает..
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2014, 00:15     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     setlocale(0, "");
     char m, i;
     int v, t;
     i = 0;
     v = 0;
     m = NULL;
     do
     {
         v = v + 1;
         printf("Хотите продолжить \n v = %d ", v);
         m = getc(stdin);
         getchar();
 
     } while(m!='y');
     
    return 0;
Добавлено через 1 минуту
Цитата Сообщение от fmtuner Посмотреть сообщение
странно - у меня нормально работает..
char m, а чтение в строку (scanf("%s",&m)).
Nezgibaem
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 9
29.03.2014, 01:57  [ТС]     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #9
Проверил последний предложенный код - все работает. Спасибо большое. Оперативно и внятно. Но, я там поэкспериментировал, если убрать getch() из цикла while, то все опять возвращается к старым проблемам, а если поставить getch() в моей старой схеме, так же, как и в последнем коде, последней в цикле, то мой код так же работает.

Спасибо большое, "вслепую", но решение было найдено...но, пожалуйста, объясните, а что собственно произошло? Почему вставка getch() так сильно изменила работу программы, ведь это обычная функция ввода, которая ожидает ввода символа с клавиатуры, ее единственная особенность - игнорирование строки перевода текста, т.е. нажатия клавиши "enter", более того, сама getch() не работает без scanf(....). Я может достаточно глупый человек, но очень хочу понять суть процесса.
Т.е. ниже работающая как мне надо программа(автора последнего кода прошу меня извинить, что я подверг ваш код некоторым экспериментам)
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
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include "stdio.h"
//#include <fstream.h>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "");
     char m;
     int v, t,i,a;
     i = 1;
     v = 0;
     m = NULL;
     a=1;
 
     do
     {
         v = v + 1;
         printf(" \n Хотите продолжить \n v = %d ", v);
         //m = getc(stdin);
         scanf("%c",&m);// удалишь эту строчку - не заработает(старая ошибка)
         getchar();     //удалишь эту строчку то же не заработает(старая ошибка)
         //они работают только парой, ПОЧЕМУ? 
     } 
     while(m!='y');
     
    
    
        //getch();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2014, 02:40     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y"
Еще ссылки по теме:

"выполнить" + консольное приложение C++
C++ Считывать с клавиатуры символы до тех пор, пока не введен символ "$"
Просматривать массив до тех пор, пока не встретится 0 C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2014, 02:40     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" #10
Цитата Сообщение от Nezgibaem Посмотреть сообщение
Почему вставка getch() так сильно изменила работу программы, ведь это обычная функция ввода, которая ожидает ввода символа с клавиатуры, ее единственная особенность - игнорирование строки перевода текста, т.е. нажатия клавиши "enter"
Во-первых, не getch(), а getchar(). getchar() не игнорирует '\n'? Я для этого её в код и вставил, чтобы извлечь '\n' после ввода.

Добавлено через 12 минут
Вот так с getсh() можно:
C++
1
2
3
4
5
6
7
     do
     {
         v = v + 1;
         printf(" \n Хотите продолжить \n v = %d ", v);
         m = getch();     
     } 
     while(m != 'y');
Yandex
Объявления
29.03.2014, 02:40     Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y"
Ответ Создать тему
Опции темы

Текущее время: 03:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru