Функция getche()

248
06 мая 2018, 20:05

Есть 2 примера программы. в первоем примере требуется обязательно указать ch определенное значение

int main()
{
    int chcount = 0;
    int wdcount = 1;
    char ch = 'a';              //ch должна иметь определенное значение
    cout << "Введите строку: ";
    while (ch != '\r')
    {
        ch = _getche();
        if (ch == ' ')
            wdcount++;
        else
            chcount++;
    }
    cout << "\nСлов: " << wdcount << endl;
    cout << "Букв: " << (chcount-1) << endl;
    return 0;
}

во втором примере уже не требуется присваивать ch значение

int main()
{
    int chcount = 0;
    int wdcount = 1;
    char ch;                          // уже без символа 'a'    
    cout << "Введите строку: ";
    while ((ch=_getche()) != '\r')
    {
        if (ch == ' ')
            wdcount++;
        else
            chcount++;
    }
    cout << "\nСлов: " << wdcount << endl;
    cout << "Букв: " << chcount << endl;
    return 0;
}

Это из книги ООП C++ Лафоре 113 страница https://books.google.by/books?id=vUXt0ZJD600C&lpg=PP1&hl=ru&pg=PA113#v=onepage&q&f=true

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

Если убрать значение у ch в первом примере то тогда компилятор ругается на ошибку cpp(15): error C4700: использована неинициализированная локальная переменная "ch"

немного погуглив:

Инициализация означает, что переменная запущена в работу, ей присвоено начальное значение, она инициализирована. Без присвоения начального значения переменная просто объявлена, а с начальным значением она еще и инициализирована.

Остается вопрос какой участок кода требует инициализации переменной ch? По логике осмелюсь предположить строчка ch = _getche(); требует инициализации от char ch = 'a'; но не уверен

Answer 1

Ну в первом примере вы в цикле, в начале, пытаетесь проверить значение неинициализированной переменной ch. Строка

while (ch != '\r')

Запрашивает проверку по сути неинициализированной переменной(если конечно вы не пишете char ch = 'a') это и вызывает ошибку, и слава богу, я вам скажу.

READ ALSO
Ошибка QObject: Cannot create children for a parent that is in a different thread.

Ошибка QObject: Cannot create children for a parent that is in a different thread.

Вот такой вот несложный код бегаю по QMap вытаскиваю сайт и его загружаюНесколько раз получаю это

227
Как сравнивать два массива с обьектами в jest

Как сравнивать два массива с обьектами в jest

У меня есть 2 обьекта внутри у них есть свойство options это массив и внутри элементов массива есть обьекты со свойством variants который тоже является...

193
как установить компоненты галп из package.json?

как установить компоненты галп из package.json?

Такой вопрос у меня есть папка в ней - packagejson и нужные в нем компоненты

220
Замена буквы на заглавную

Замена буквы на заглавную

Выдает "arrreplace is not a function"

213