использование fflush на C++

Может ли кто-нибудь помочь мне с использованием fflush в C++

Вот пример кода на C

#include <stdio.h>
using namespace std;

int a,b,i;
char result[20];

int main() {
  scanf("%d %d\n", &a, &b);
  for (i=1; i<=10; i++) {
    printf("5\n");
    fflush(stdout);
    gets(result);
    if (strcmp(result, "congratulation") == 0) break;
  }
  return 0;
}

Это программа для получения интерактивного ввода.

Я обычно использую cin и cout, так можно ли не использовать printf и scanf?


person zeulb    schedule 11.09.2011    source источник
comment
[Это не скомпилируется (hasil нигде не объявлено). Это тоже не C (C не имеет пространств имен и заголовка iostream).]   -  person Mat    schedule 11.09.2011
comment
Я обычно использую cin и cout, так можно ли не использовать printf и scanf? Да можно, используйте cin и cout (как обычно), а не printf и scanf!   -  person Christian Rau    schedule 11.09.2011
comment
Вы спрашиваете, как сбрасывать при использовании cin и cout?   -  person razlebe    schedule 11.09.2011
comment
да. Я провожу некоторые исследования, и fflush (stdout) аналогичен cout‹‹flush на C++, но мне все еще нужен пример кода.   -  person zeulb    schedule 12.09.2011
comment
@zeulb У вас уже есть два прекрасных примера кода C ++, хотя << flush там скрыто в << endl, что на самом деле не делает ничего, кроме << '\n' << flush.   -  person Christian Rau    schedule 12.09.2011


Ответы (3)


Перевод в стиль программирования на C++ таков:

#include <iostream>

using std::cin;
using std::cout;
using std::string;

int main() {
  string line;
  int a, b;

  if (cin >> a >> b) {
    for (int i = 0; i < 10; i++) {
      cout << "5" << std::endl; // endl does the flushing
      if (std::getline(cin, line)) {
        if (line == "congratulations") {
          break;
        }
      }
    }
  }
  return 0;
}

Обратите внимание, что я намеренно добавил некоторую проверку ошибок.

person Roland Illig    schedule 11.09.2011

Хотя я не совсем понял ваш вопрос, версия вашей программы на С++ будет примерно такой (при условии, что hasil должно быть result):

#include <iostream>

int main() {
    int a,b,i;
    std::string result;
    std::cin >> a >> b;
    for (i=1; i<=10; i++) {
        std::cout << "5" << std::endl;
        std::cin >> result;
        if (result == "congratulation") break;
    }
    return 0;
}

Обратите внимание, что std::endl эквивалентно '\n' << std::flush, поэтому и конец строки, и вызов .flush() в потоке (который является вашим эквивалентом fflush).

На самом деле, чтобы получить реальный эквивалент вашему вызову scanf (и не нажимать клавишу ввода между a и b), вам нужно будет сделать что-то вроде:

#include <sstream>
...
std::string line;
std::cin >> line;
std::istringstream str(line);
str >> a >> b;
person Christian Rau    schedule 11.09.2011

Если вам нужны средства C IO, укажите <cstdio>. Теперь у вас есть std::printf и std::fflush и т. д. Вы можете позвонить std::ios::sync_with_stdio(), если хотите. для совместного использования C IO и iostreams.

person Kerrek SB    schedule 11.09.2011