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?

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top