0

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いるので使わないのは可能printfですscanfか?

4

3 に答える 3

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

意図的にいくつかのエラー チェックを追加したことに注意してください。

于 2011-09-11T19:43:34.207 に答える
2

私はあなたの質問を完全には理解していませんが、あなたのプログラムの 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 の間で Enter キーを押さないでください)、次のようにする必要があります。

#include <sstream>
...
std::string line;
std::cin >> line;
std::istringstream str(line);
str >> a >> b;
于 2011-09-11T19:39:21.290 に答える
1

C IO 機能が必要な場合は、 を含めます<cstdio>。などがstd::printfあります。C IO と iostream を織り交ぜて使用したい場合は、std::fflush呼び出すことを検討してください。std::ios::sync_with_stdio()

于 2011-09-11T19:30:42.423 に答える