C++ 使用递增整数c+;格式化字符串+;

C++ 使用递增整数c+;格式化字符串+;,c++,printf,C++,Printf,有没有一种不重复i++ int i = 0; printf("foo-%d,blah-%d,orange-%d", i++, i++, i++); 我需要使用8对或更多对执行此操作,代码看起来很糟糕。参数的求值顺序未指定。此外,如果没有中间的序列点,则不能修改变量两次。因此,请改为: printf("foo-%d,blah-%d,orange-%d", i, i+1, i+2); i+=3; 您可能会根据前缀而不是数字来考虑: int i = 0; std::vector<std::s

有没有一种不重复
i++

int i = 0;
printf("foo-%d,blah-%d,orange-%d", i++, i++, i++);

我需要使用8对或更多对执行此操作,代码看起来很糟糕。

参数的求值顺序未指定。此外,如果没有中间的序列点,则不能修改变量两次。因此,请改为:

printf("foo-%d,blah-%d,orange-%d", i, i+1, i+2);
i+=3;

您可能会根据前缀而不是数字来考虑:

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;
}
或者,使用索引:

for (i = 0; i < prefixes.size(); ++i) {
//   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    if (!first)
        std::cout << ',';
    std::cout << prefixes[i] << '-' << i;
    //           ~~~~~~~~~~~           ~
    first = false;
}
for(i=0;istd::cout由于您可以有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;
std::vec_向量值={“foo”,“blah”,“orange”};
对于(size_t index=0;indexstd::cout不仅看起来很糟糕,而且是未定义的行为。这里有很多未定义的行为。也许您需要创建自己的函数以尽可能保持代码的整洁。请看一下vprintf()和variable arguments functions()[c++]和[printf]下的一个问题…哇哦O_ó…jsut听起来不那么讨厌…它是纯c,即使它编译了也不应该混淆。为什么不
printf(“foo-1,blah-2,orange-3”);
或者
int x=…;printf(“foo-%d,blah-%d,orange-%d”,x,x+1,x+2);
?我不知道关于修改变量两次的规则。谢谢。(顺序不重要).真的吗?你不在乎输出是
foo-1,blah-2,orange-3
还是
foo-3,blah-1,orange-2
还是
foo-2,blah-3,orange-1
还是…?@DavidSchwartz+1.
foo-1,blah-1,orange-1
也是可能的:)@dasblinkenlight:对,因为缺少一个序列点,所以任何事情都可能发生实际上这里有两个问题。
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;