Я только начинаю на C ++
Welcome! Я знаю, что вы найдете обучение программированию на С ++ одновременно запутанным и приятным. Могу ли я предложить вам сначала приобрести хорошую книгу по С ++? Здесь есть превосходный список таких книг: The Definitive C ++ Book Guide и List
1) Что не так со следующей программой?
#include <iostream>
using namespace std;
Вы не должны импортировать все пространство имен std
. В этом пространстве имен много символов, и в какой-то момент вы почти наверняка столкнетесь с одним из них. Я знаю, что многие учебники для начинающих учат вас делать это. Не.
int main()
{
char thing[1];
Нет оснований объявлять thing
массив. Это должно быть char thing;
.
cin >> thing;
Потому что, когда вы делаете это, вы создаете ошибку переполнения буфера. Поскольку thing
является массивом, cin
будет обрабатывать thing
как строку в стиле C и с радостью записывать в нее всю строку ввода, даже если она не подходит.
if (thing == 97)
cout << "You pressed 'a'!\n";
- (при условии, что вы не исправили определение
thing
), thing==97
сравнивает массив с константой 97. Более конкретно, он сравнивает адрес первого элемента массива с константой 97. Это плохо и, вероятно, даже не скомпилируется.
- (Предполагая, что вы исправили определение
thing
), открытая константа 97
сбивает с толку читателей вашего кода, в том числе и вас. Вместо этого сравните thing
с одинаково действительной интегральной константой 'a'
.
Собираем все вместе:
#include <iostream>
using std::cout;
using std::cin;
int main()
{
char thing;
cin >> thing;
if (thing == 'a')
cout << "You pressed 'a'!\n";
else
cout << "You pressed not-'a': " << thing << "\n";
return 0;
}
2) Как я могу сделать так, чтобы вместо того, чтобы вводить букву в качестве ввода и нажимать ввод, программа просто сразу же принимает нажатие клавиши?
Как уже отмечали другие, для этого вы должны использовать API для конкретной платформы. В Microsoft Windows попробуйте getch()
.