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?
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
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++).
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.