在 C++ 上使用 fflush

发布于 2024-12-04 04:49:03 字数 501 浏览 3 评论 0原文

有人可以帮助我在 C++ 中使用 fflush

这是 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

Can someone help me using fflush in C++

Here is a sample code in 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;
}

This is program for getting interactive input.

I usually use cin and cout so is it possible not using printf and scanf?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

居里长安 2024-12-11 04:49:03

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

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

The translation to C++ programming style is this:

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

Note that I deliberately added some error checking.

不知所踪 2024-12-11 04:49:03

虽然我还没有完全理解你的问题,但你的程序的 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;

Although I haven't completely understood your question, the C++ version of your program would be something like this (assuming hasil should be 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;
}

Note, that std::endl is equivalent to '\n' << std::flush and therefore both puts the line end and calls .flush() on the stream (which is your fflush equivalent).

Actually to get the real equivalent to your scanf call (and not press enter between a and b), you would have to do something like:

#include <sstream>
...
std::string line;
std::cin >> line;
std::istringstream str(line);
str >> a >> b;
潜移默化 2024-12-11 04:49:03

如果您需要 CIO 设施,请包含 < /a>.您现在有 std::printfstd::fflush 等。您可以考虑调用 std::ios::sync_with_stdio() 如果你想交织使用 C IO 和 iostream。

If you have need for C IO facilities, include <cstdio>. You now have std::printf and std::fflush etc. You might consider calling std::ios::sync_with_stdio() if you want to use C IO and iostreams interwovenly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文