为什么不能在条件运算符中指定endl?

时间:2018-10-28 19:21:32

标签: c++ cout conditional-operator endl

我正在尝试通过使用for循环来打印逗号分隔的数字列表,但是我不希望在最后一个数字后出现逗号,而是希望有一个endl

我有此代码:

for (int j = i; j > 0; j--) {
    // Should print 9, 8, 7, 6, 5, 4, 3, 2, 1[endl]
    cout << j << (j > 1 ? ", " : endl);
}

但是,出现编译错误

error: overloaded function with no contextual type information
    cout << j << (j > 1 ? ", " : endl);
                                 ^~~~

我已经包含了iostream,endl在程序的其他部分工作正常,而将endl替换为"\n"很好...

我只想知道为什么会发生此错误

3 个答案:

答案 0 :(得分:2)

endl是一个添加\n然后刷新流的函数,它不是字符串。因此,由于它们的类型不同,因此不能与其他字符串一起用于三元组。

for (int j = i; j > 1; j--) {
    // Prints 9, 8, 7 ,6, 5, 4, 3, 2, 
    cout << j << ", ";
}
cout << 1 << endl;

当然,您需要处理i小于1的情况。

另一个选择是您的"\n"

答案 1 :(得分:1)

它们必须具有相同类型。请改用"\n"

for (int j = i; j > 0; j--) {
    // Should print 9, 8, 7, 6, 5, 4, 3, 2, 1[endl]
    cout << j << (j > 1 ? ", " : "\n");
}

答案 2 :(得分:1)

条件运算符?:;只能返回相同的类型。 endl不是char *,而是“ \ n”。