Avatar billede kebee Nybegynder
06. februar 2006 - 08:43 Der er 4 kommentarer

hvad er fflush

Jeg har har prøvet forskellige måder at læse fra stdin. Denne måde som står nedenunder opfører sig lidt underligt. Den springer simpelthen den sidste getchar() over. Jeg har fået at vide at man skal flushe en buffer med fflush. Men ved ikke helt hvordan. Jeg har prøvet at indsætte fflush(stdin) efter den første getchar men det hjalp ikke. Hvordan skal denne fflush bruges i dette tifælde?

int cPrioritet;
int intTilstand;
char cCpr[10];

int main()
{
gets(cCpr);
cPrioritet = getchar();
intTilstand = getchar();
printf("%s %c %c ", cCpr, cPrioritet , intTilstand);

return 0;

}
Avatar billede kebee Nybegynder
06. februar 2006 - 08:47 #1
Beklager den kom to gange
Avatar billede rigpig Nybegynder
06. februar 2006 - 10:08 #2
Kiggede lidt i MSDN, der er følgende eksempel:
/* FFLUSH.C */

#include <stdio.h>
#include <conio.h>

void main( void )
{
  int integer;
  char string[81];

  /* Read each word as a string. */
  printf( "Enter a sentence of four words with scanf: " );
  for( integer = 0; integer < 4; integer++ )
  {
      scanf( "%s", string );
      printf( "%s\n", string );
  }

  /* You must flush the input buffer before using gets. */
  fflush( stdin );
  printf( "Enter the same sentence with gets: " );
  gets( string );
  printf( "%s\n", string );
}


Output

Enter a sentence of four words with scanf: This is a test
This
is
a
test
Enter the same sentence with gets: This is a test
This is a test
Avatar billede bertelbrander Novice
06. februar 2006 - 19:48 #3
Som sædvanlig går msdn ikke så meget op i at overholde standarden...
Forsøg på at flush'e input streams resulterer i "undefined behaviour" og det virker almindeligvis ikke på linux/unix.

Den besdste måde omgå problemet er at bruge fgets til at læse HVER gang (eller std::getline med std::string hvis det er C++).
Avatar billede segmose Nybegynder
22. februar 2006 - 09:20 #4
Brug aldrig gets() hvis brugeren skriver 81 tegn eller flere får du buffer overflow, brug fgets istedet.

http://www.cplusplus.com/ref/cstdio/fgets.html
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester