如果不重复i++
int i = 0;
printf("foo-%d,blah-%d,orange-%d", i++, i++, i++);
我需要使用8对或更多对,并且代码看起来很可怕..
答案 0 :(得分:4)
参数的评估顺序未指定。此外,如果没有插入序列点,则无法修改变量两次。所以这样做:
printf("foo-%d,blah-%d,orange-%d", i, i+1, i+2);
i+=3;
答案 1 :(得分:3)
由于您可以拥有8对或更多对,我建议您使用更易读且易于扩展的版本:
std::vector<std::string> vec_values = {"foo", "blah", "orange"};
for (size_t index = 0; index < vec_values.size(); ++index)
std::cout << vec_values[index] << "-" << index;
答案 2 :(得分:1)
您可能会根据前缀来考虑它,而不是数字:
int i = 0;
std::vector<std::string> prefixes { "foo", "bar", "baz", "ham" };
bool first = false;
for (const auto& prefix : prefixes) {
if (!first)
std::cout << ',';
std::cout << prefix << '-' << i++;
first = false;
}
如果你不能使用基于C ++ 11范围的for
,你可以完全写出来:
for (auto prefix = prefixes.begin(); prefix != prefixes.end(); ++prefix) {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (!first)
std::cout << ',';
std::cout << *prefix << '-' << i++;
// ~~~~~~~
first = false;
}
或者,使用指数:
for (i = 0; i < prefixes.size(); ++i) {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (!first)
std::cout << ',';
std::cout << prefixes[i] << '-' << i;
// ~~~~~~~~~~~ ~
first = false;
}