usando fflush su c ++
-
28-10-2019 - |
Domanda
Qualcuno può aiutarmi a usare fflush
In C ++
Ecco un codice di esempio 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;
}
Questo è un programma per ottenere input interattivi.
Di solito uso cin
e cout
Quindi è possibile non usare printf
e scanf
?
Soluzione
La traduzione in programmazione C ++ stile è questo:
#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;
}
Si noti che ho deliberatamente aggiunto un controllo degli errori.
Altri suggerimenti
Se hai bisogno di strutture c io, includi <cstdio>
. Ora hai std::printf
e std::fflush
ecc. Potresti considerare di chiamare std::ios::sync_with_stdio()
Se vuoi usare c io e iostreams intrecciati.
Anche se non ho capito completamente la tua domanda, la versione C ++ del tuo programma sarebbe qualcosa del genere (supponendo hasil
dovrebbe essere 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;
}
Notare che std::endl
è equivalente a '\n' << std::flush
e quindi entrambi mette la fine della linea e le chiamate .flush()
sul flusso (che è tuo fflush
equivalente).
In realtà per ottenere il vero equivalente al tuo scanf
Chiama (e non premere Invio tra A e B), dovresti fare qualcosa del tipo:
#include <sstream>
...
std::string line;
std::cin >> line;
std::istringstream str(line);
str >> a >> b;