关于c ++:std :: cout不使用endl输出值(换行符)


std::cout not printing the value with out endl (newline specifier)

下面是我的c ++程序,用于将两个字符串(字符串中的整数)相乘并在字符串中产生整数结果。 我相信这是由于cout冲洗问题。 有人可以在打印答案之前解释如何不使用endl或任何文本字符串打印值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 #include <iostream>
 using namespace std;
 string multiply (string s1, string s2)
 {
    char str[10];
    string ans="";
    int m=s1.length();
    int n=s2.length();

    if (!s1.compare("0") || !s2.compare("0"))
         return"0";

       int *res = new int[m + n];

       for (int i = m - 1; i >= 0; i--)
       {
         for (int j = n - 1; j >= 0; j--)
         {
          res[m + n - i - j - 2] += (s1[i] - '0') * (s2[j] - '0');
          res[m + n - i - j - 1] += res[m + n - i - j - 2] / 10;
          res[m + n - i - j - 2] %= 10;
         }
       }


       for (int i = m + n - 1; i >= 0; i--)
       {
            if (res[i] != 0)
            {
                for (int j = i; j >= 0; j--)
                {
                  sprintf(str,"%d", res[j]);
                  ans+=str;
                }
                return ans;
            }

        }
 }

int main() {

 cout << multiply("0","0"); // Doesn't work - prints nothing.
 /**cout << multiply("0","0") << endl; //works!! This prints"0" correctly **/

 return 0;
}

您应注意,std::endl包括刷新输出流。 根据参考文档:

Inserts a newline character into the output sequence os and flushes it as if by calling os.put(os.widen('
'))
followed by os.flush().

因此,如果在示例中打印后刷新cout

1
2
3
4
cout << multiply("0","0");
cout.put(cout.widen('
'
));
cout.flush();

您会看到结果打印为Live Demo

有关刷新及其对缓冲输出的实际含义的更多信息,请在此处std::ostream::flush()