使用基于C ++ fflush(using fflush on C++)

2019-10-28 19:44发布

谁能帮我用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;
}

这是获得交互式输入程序。

我通常使用cincout所以是有可能不使用printfscanf

Answer 1:

翻译到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;
}

请注意,我特意加了一些错误检查。



Answer 2:

如果您需要对C IO设施,包括<cstdio> 。 现在,您可以std::printfstd::fflush等你可能会考虑调用std::ios::sync_with_stdio()如果你想用C IO和interwovenly iostreams的。



Answer 3:

虽然我还没有完全了解你的问题,C ++程序的版本将是这样的(假设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;


文章来源: using fflush on C++