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; } |
您应注意,
Inserts a newline character into the output sequence
os and flushes it as if by callingos.put(os.widen(' followed by
'))os.flush() .
因此,如果在示例中打印后刷新
1 2 3 4 | cout << multiply("0","0"); cout.put(cout.widen(' ')); cout.flush(); |
您会看到结果打印为Live Demo。
有关刷新及其对缓冲输出的实际含义的更多信息,请在此处