Принцип работы функции getche()

123
13 октября 2019, 03:20

Программа должна посчитать количество символов и слов в введённой строке, считывание осуществляется при помощи функции getche().

Пример из учебника:

#include "pch.h"
#include <iostream>
#include <conio.h>
#pragma warning(disable : 4996)
using namespace std;
int main()
{
    int chcount = 0;
    int wdcount = 1;
    char ch = 'a';
    cout << "Enter a phrase: ";
    while (ch != '\r')
    {
        ch = getche();
        if (ch == ' ')
            wdcount++;
        else
            chcount++;
    }
    cout << "\nWords=" << wdcount << endl
    << "Letters= " << (chcount - 1) << endl;
    return 0;
}

Вывод такой программы будет не правильным. Например: при строке "dfg" количество символов(chcount) будет равно 6, при строке "dfg dfg" кол-во символов будет 13.

Функция getche() возвращает очередной символ, считанный с консоли, и выводит этот символ на экран.

Пошаманив с отладкой, предполагаю, что после вывода полученного символа на экран считывает его ещё раз, притом в виде "\0".

Windows. Visual Studio 2017.

Это связанно с принципом работы getche? VS? В более поздних версиях VS или новых стандартах C++ старая функция совсем ненормально работает?

Answer 1

Как написано тут при компиляции с динамической библиотекой /MD функция getche() работает правильно в Visual Studio 2017.

Проект -> Свойства проекта -> Свойства конфигурации -> C/C++ -> Создание кода -> Библиотека времени выполнения -> Многопоточный DLL (/MD) Не уверен что решает проблему полностью, но в данном примере getche() начинает работать корректно.

READ ALSO
Как найти путь бинарного файла?

Как найти путь бинарного файла?

Исполняемое приложение подключает плагинКак внутри этого плагина узнать абсолютный путь по которому он лежит?

134
Удаление элементов вектора

Удаление элементов вектора

Подскажите, как корректно пройтись по вектору и удалить некоторые его элементыТ

134
Отключение исключений и RTTI в VS2017

Отключение исключений и RTTI в VS2017

Смотрел видео Mike Acton и там рассказывалось, что в геймдеве не используют исключения, RTTI и тд

139
Подключение к телеграмму через Telegram Api

Подключение к телеграмму через Telegram Api

создал бота, начал использовать telegram api проект собирается при помощи maven докинул зависимость

123