我有一个允许用户输入关卡编号的程序,然后它会播放该级别:
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字符串的长度,因为它是一个数组,所以如何确保用户输入三位数?
答案 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);