Использование 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
?
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;
}
Обратите внимание, что я намеренно добавил некоторые проверки ошибок.
Хотя я не до конца понял ваш вопрос, версия вашей программы на 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;
Если вам нужны средства C IO, включите <cstdio>
, Теперь у вас есть std::printf
а также std::fflush
и т.д. Вы могли бы рассмотреть вопрос о звонке std::ios::sync_with_stdio()
если вы хотите использовать C IO и iostreams переплетены.