我写了一些类似于getint函数的东西.有人有改进的建议吗?

  • 本文关键字:类似于 函数 getint c++ integer
  • 更新时间 :
  • 英文 :


首先我要承认我仍然是一个相当初学者。我大约半年前开始学习c,几天前开始学习c++,所以请不要对我太苛刻:)。

你可能知道下面的问题:您编写了一个在控制台中运行的小程序,并希望用户输入一些内容。当然,当用户输入错误的东西时,这是非常不方便的,所以我们必须做好准备,以防任何小孩子像疯子一样在键盘上黑客攻击。

大多数函数等待有效的输入,这导致了当用户只按enter键时出现令人讨厌的换行问题。

这个问题在linux下通常也很容易解决:使用getchar读取一个字符,使用ANSI转义序列确定光标的位置,并提供一个do while循环。

BUT:我找不到一个简单的函数能以同样优雅的方式读取数字。该函数必须能够读入数字,但也能够防止换行。为了实现这一点,我使用getchar并将字符存储在一个字符数组中,然后将其索引转换为相应的数字,然后将其添加到实际数字中。

但是也许有更简单的方法?或者你有如何优化函数的想法?

#include <iostream>
#include "TheGameHeaders.h"
#define CLEAR_LINE printf("33[K")
#define POSITION(Ze, Sp) printf("33[%d;%dH", Ze, Sp)
#define CLEAR printf("33[2J")

int getint(int pos_ze, int pos_sp, int qntty_of_incs)
{   
int i = 0;
char fake_nbr;
char fake_nbrs[qntty_of_incs];
int real_nbr = 0;
int real_nbrs[qntty_of_incs];

do
{
POSITION(pos_ze, pos_sp);
while((fake_nbr = getchar()) != 'n')
{
if(fake_nbr == '0' || fake_nbr == '1' || fake_nbr == '2' || fake_nbr == '3' || fake_nbr == '4' || fake_nbr == '5' || fake_nbr == '6' || fake_nbr == '7' || fake_nbr == '8' || fake_nbr == '9')
{
if(i <= (qntty_of_incs-=1))
{
fake_nbrs[i] = fake_nbr;
i++;
qntty_of_incs++;
}
else
{
return 1;
}
}
else
{
return 0;
}
}
}
while(i < 1);
for(int a = 0; a < i; a++)
{
fake_nbrs[a] -= '0';
real_nbrs[a] = fake_nbrs[a];
}
int i_fix = i;
int i_fix_2 = i-=1;
for(int a = 0; a < i_fix; a++)
{
i = i_fix_2;
real_nbrs[a] *= pow(10, i-=a);
}
for(int a = 0; a < i_fix; a++)
{
real_nbr += real_nbrs[a];
}
return real_nbr;
}

听起来你只是在寻找一种更好的方法来获得整数,如果这是真的,那么是的,有更好的方法。

#include <iostream>
#include <string>
int main() {
int x;
while (true) {
std::cout << "Enter an integer: ";
std::cin >> x;
if (std::cin.good()) {
break;
}
else {
std::cout << "Not an Integer" << std::endl;
std::cin.clear();
std::cin.ignore(INT_MAX, 'n');
}
}
std::cout << x << std::endl;
}

您可以使用标准输入流cin直接读取整数而不会产生任何混乱。您可以使用cin.good检查输入是否有效。如果你想再试一次,你必须清空缓冲区。

最新更新