如何检查输入的长度? (C ++)

时间:2009-07-03 19:58:27

标签: c++ string

我有一个允许用户输入关卡编号的程序,然后它会播放该级别:

char lvlinput[4];
std::cin.getline(lvlinput, 4)
char param_str[20] = "levelplayer.exe "
strcat_s(param_str, 20, lvlinput);
system(param_str);

级别数据存储在文件夹\ 001,\ 002,\ 003等等中。但是,我无法判断用户是否输入了三位数,即:1,01或001。所有文件夹都列为三位数字。我不能只检查lvlinput字符串的长度,因为它是一个数组,所以如何确保用户输入三位数?

7 个答案:

答案 0 :(得分:9)

为什么不使用std::string
这使得存储,连接和修改变得更加容易。

如果您之后需要c风格的字符串,请使用:my_string.c_str()

以下是提示:要输入3个字符的长度,请使用std::insert在数字前加0。

答案 1 :(得分:7)

你真的在问错误的问题。调查C ++ std :: string类,然后再回到这里。

答案 2 :(得分:3)

嗯?为什么他们需要输入3位数?如果他们不这样做,为什么不填充呢?如果确实想要检查他们输入的是3位数,请使用strlen。但我建议你做的是atoi他们的输入,然后是sprintf(cmd, "levelplayer.exe %03d", lvlinput_as_integer)

答案 3 :(得分:2)

你是什么意思,你不能检查字符串的长度? getline生成一个以NULL结尾的c-string,所以只需使用strlen(lvlinput)。

答案 4 :(得分:2)

以下是如何在C ++中执行此操作:

std::string lvlinput;
std::getline(std::cin, lvlinput);
if (lvlinput.size() > 3) { // if the input is too long, there's nothing we can do
  throw std::exception("input string too long");
}
while (lvlinput.size() < 3) { // if it is too short, we can fix it by prepending zeroes
  lvlinput = "0" + lvlinput;
}
std::string param_str = "levelplayer.exe ";
param_str += lvlinput; 
system(param_str.c_str());

你有一个很好的字符串类,它可以处理串联,长度以及所有其他繁琐的事情。所以使用它。

请注意,我使用std::getline代替cin.getline。后者将输入写入char数组,而前者写入正确的字符串。

答案 5 :(得分:0)

Neil告诉你应该从哪里开始,你的代码可能看起来像这样。

std::string level, game = "levelplayer.exe ";

std::cout << "Enter the level number : ";
std::cin >> level;

if(level.size() != 3)
{
    // Error!
}
else
{
// if you have more processing, it goes here :) 
    game += level;
    std::system(game.c_str());
}

答案 6 :(得分:0)

您可以使用以下命令检查getline返回的NULL终止字符串的长度:

int len = strlen(lvlinput);

这是有效的,因为getline返回以NULL结尾的字符串。

然而,除了你的问题之外,这是另一回事。如果你想远离std :: string(并且在这种情况下没有任何特殊原因),那么你应该只将字符串转换为整数,并使用整数来构造命令系统文件:

char lvlinput[4];
std::cincin.getline(lvlinput, 4);
char param_str[20];
snprintf(param_str, 20, "levelplayer.exe %03d", atoi(lvlinput));
system(param_str);