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

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

Войти
Регистрация
Восстановить пароль
 
Nezgibaem
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 9
#1

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

28.03.2014, 22:25. Просмотров 874. Ответов 9
Метки нет (Все метки)

Доброго времени суток.
Прошу помочь в решении поставленного передо мной вопроса.
Суть: Нужно написать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2014, 22:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" (C++):

Выполнение цикла до тех пор, пока не будет нажата определенная клавиша - C++
Доброе время суток, люди добрые! Начал заниматься С++ не так давно, поэтому всех хтростей не знаю, в следствие чего прошу о помощи....

Вводить с клавиатуры числа до тех пор, пока не будет нажата клавиша <<ESC>> - C++
Задание: Вводить с клавиатуры числа до тех пор, пока не будет нажата клавиша &lt;&lt;ESC&gt;&gt;. На экран вывести кол-во вводимых чисел. #include...

Считывать с клавиатуры символы до тех пор, пока не введен символ "$" - C++
Задача: Напишите программу, которая считывает с клавиатуры символы до тех пор, пока не будет введен символ &quot;$&quot;. Организуйте в программе...

Запрашивать у пользователя строки до тех пор, пока он не введет строку "Все" - C++
Помогите пожалуйста решить задачу на С++ на строки. Запрашивать у пользователя строки до тех пор, пока он не введет строку &quot;Все&quot;

С++ консольное приложение win32, матерится на первое "pow" после "if", а на "system" говорит что неопределён. - C++
#define _CRT_SECURE_NO_WARNINGS #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;iostream&gt; #define Pi 3.1416 #include &lt;clocale&gt;...

Создать ф-ию,печатающую таблицу квадратов чисел от 1 до тех пор,пока квадрат числа не превысит значения предела,переданного в ф-ию в кач-ве параметра - C++
Создать функцию,печатающую таблицу квадратов чисел от 1 до тех пор,пока квадрат числа не превысит значения предела,переданного в функцию в...

9
programmist99
21 / 21 / 7
Регистрация: 18.03.2014
Сообщений: 296
28.03.2014, 22:38 #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
0
zer0mail
2343 / 1973 / 193
Регистрация: 03.07.2012
Сообщений: 7,094
Записей в блоге: 1
28.03.2014, 22:48 #3
Программа будет ждать нажатия клавиш. Вряд ли это то, что нужно ТС.
0
programmist99
21 / 21 / 7
Регистрация: 18.03.2014
Сообщений: 296
28.03.2014, 22:52 #4
зачем усложнять себе работу, красный крестик нам на что)
0
Байт
Эксперт C
16149 / 10427 / 1556
Регистрация: 24.12.2010
Сообщений: 19,759
28.03.2014, 22:56 #5
Цитата Сообщение от zer0mail Посмотреть сообщение
Программа будет ждать нажатия клавиш
Тут надо что-то вроде kbhit, но она, кажись, есть не повсюду. Хотя в conio.h должна быть
0
Nezgibaem
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 9
28.03.2014, 23:41  [ТС] #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? Я очевидно упускаю что-то важное, но докопаться до этого не получается - об этом нигде не написано.
0
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
29.03.2014, 00:02 #7
странно - у меня нормально работает..
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2014, 00:15 #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)).
0
Nezgibaem
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 9
29.03.2014, 01:57  [ТС] #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();
}
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2014, 02:40 #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');
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2014, 02:40
Привет! Вот еще темы с ответами:

"выполнить" + консольное приложение - C++
Пишу в окошке &quot;выполнить&quot; путь к приложению + параметр рядом. напр. C:\\game.exe speedhack Нужно чтобы этот параметр считывался...

Просматривать массив до тех пор, пока не встретится 0 - C++
Дан массив случайных чисел. Просматривать массив до тех пор, пока не встретится 0, и все четные числа записывать во второй массив. Если в...

Cчитывать строку в консоли до тех пор пока не встретится точка. - C++
Нужно считывать строку в консоли до тех пор пока не встретится точка.

Запрашивать пароль до тех пор, пока он не будет правильно введен - C++
Составить программу, которая запрашивает пароль (например, четырехзначное число) до тех пор, пока он не будет правильно введен.


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
29.03.2014, 02:40
Ответ Создать тему
Опции темы

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