2016-02-07 3 views
0

Ниже моя программа на C++ для умножения двух строк (целые числа в строках) и получения целочисленного результата в строке. Я считаю, что это связано с проблемой cout flush. Может кто-нибудь объяснить, как печатать значение без endl или любой текстовой строки непосредственно перед печатью ответа.std :: cout не печатает значение без outl (спецификатор новой строки)

#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; 
} 

ответ

1

Вы должны заметить, что std::endl включает промывку выходного потока. Как из reference documentation:

Вставляет символ новой строки в выходной последовательности os и промывает его, как если бы по телефону os.put(os.widen('\n')) с последующим os.flush().

Так что, если вы смывать cout после печати в вашем примере

cout << multiply("0", "0"); 
cout.put(cout.widen('\n')); 
cout.flush(); 

вы увидите результат распечатанный Live Demo.

Для получения дополнительной информации о промывке и том, что она на самом деле означает для буферизированного выхода, читайте здесь, пожалуйста, std::ostream::flush().

+0

Привет. Я попробовал ваше предложение сбросить cout после печати. ​​Но все равно это не работает. cout << умножить («0», «0»); cout.flush(); – sureshrmdec

+0

@sureshrmdec Извините, я обновил свой ответ на то, что точно указано в документации, и теперь это работает. –

Смежные вопросы