Мне нужно сделать программу на C++ в Linux, в которой используемые будут иметь возможность вводить целые числа, а не символы и специальные символы. Хорошо для окон (где я использовал заголовочный файл conio.h
для getch()
) ниже - программа, которая отлично работает.C++-программа для принятия только целых чисел от пользователя с использованием <curses.h> на Linux
#include<iostream>
#include<stdio.h>
#include<conio.h>
int getOnlyIntegers()
{
int ch;
long int num = 0;
do
{
ch = getch();
if(ch >= 48 && ch <= 57)
{
printf("%c",ch);
num = (ch-48) + (num*10);
}
if(ch == 13)
{
break;
}
}while(1);
return num;
}
int main()
{
int x;
x = getOnlyIntegers();
printf("\n%d", x);
return 0;
}
Сейчас в Linux я использую #include<curses.h>
заголовочный файл для использования getch();
и код
#include<iostream>
#include<ctype.h>
#include "curses.h"
using namespace std;
int getOnlyNumbers()
{
int ch;
int num = 0;
initscr();
do
{
ch = getch();
if(isdigit(ch))
{
cout<<ch;
num = (ch - 48) + (num*10);
}
if(ch == '\n') // if the user press enter key
{
break;
}
}while(1);
return num;
}
int main()
{
int num;
num = getOnlyNumbers();
cout<<endl<<num;
return endwin();
}
по составлению его я получаю новый экран (я предполагаю, что это, вероятно, из-за initscr()
) и каждое число, символ и специальный символ печатаются на экране, и если я нажимаю кнопку ввода, тогда экран остается таким же, как и было.
Какую правильность мне нужно сделать?
Почему я использовал getch()?
потому что variable ch
будет хранить все, что вводится через getch()
, без отображения на экране. Поэтому основная цель этой программы - показывать только номер на выходе, а также на входе.
Вот некоторые образы экранов: -
Во втором изображении, когда я нажимаю s
, a
и d
, то эти символы также отображается, и я не хочу, чтобы это отображалось.
Почему вы используете 'Геч()' на всех? – alk
@alk, чтобы при вводе символа он не будет отображаться на экране. –
Избегайте использования [* magic numbers *] (https://en.wikipedia.org/wiki/Magic_number_%28programming%29) как можно больше. Для [классификации символов] (http://en.cppreference.com/w/cpp/string/byte#Character_classification) используйте существующие функции, такие как ['std :: isdigit'] (http://en.cppreference.com/w/CPP/строка/байт/isdigit). Во всех других местах вместо этого используются фактические буквенные символы. '' \ n'' вместо '13'. Это сделает код более понятным и понятным для чтения, как для других, так и для себя через несколько месяцев. –