J'ai lutté avec ce bug pendant un moment. J'utilise Windows 10 et code :: blocks 16.01 MinGW.caractère par caractère réponse incohérente à n
Je veux comparer c à un caractère de ligne de fin.
Un programme sur mon système fonctionne avec succès, juste pour passer la ligne d'en-tête d'un fichier:
while(c!='\n')
{
c = fgetc(traverse);
if(c == EOF)
return(1);
}
où traverse a été ouvert à l'aide
fopen("traverse.dat", "r");
cependant, mes autres programmes:
FILE * infile;
/* Open a large CSV */
infile = fopen("Getty_Megatem.csv", "r");
if(infile == NULL)
{
printf("no file");
return(EXIT_FAILURE);
}
char c = 0;
int i = 0;
/* Opens file successfully */
printf("File opened\n");
/* Count commas in first line */
while(c != '\n');
{
c = fgetc(infile);
if(c == ',')
i++;
if(c == EOF)
return(EXIT_FAILURE);
}
printf("Number of commas: %i\n", i);
fclose(infile);
return(EXIT_SUCCESS);
et
ifstream infile;
char c;
string mystr;
infile.open("ostring.dat");
// Skip a line
while (c!= '\n')
infile >> c;
getline(infile, mystr);
et (celui que je veux vraiment travailler)
ifstream emdata;
string firstline;
char c = 0;
int i = 0;
vector<double> vdata;
// redundancy
vdata.reserve(10000);
// There are ~ 300 doubles per line
emdata.open("Getty_Megatem.csv");
// Skip first line
getline(emdata, firstline);
while(c != '\n' && c != EOF)
{
emdata >> vdata[i] >> c;
cout << vdata[i] << ",";
i++;
if(i == 999)
{
cout << "\n\ni>9999";
break;
}
}
emdata.close();
return 0;
ne réussissent pas, ils compiler et exécuter ensuite lire le flux toujours - ou jusqu'à ce que mes itérations maximum de 9999 soit atteint. Tous ces fichiers contiennent de nouvelles lignes.
Je ne comprends pas pourquoi ne vous contentez pas 'getline()' chaque ligne? –
Je veux lire la ligne dans le double vecteur – Edward
Votre variante C a cette ligne: 'while (c! = '\ N');' Il y a un point-virgule à la fin qui est interprété comme une instruction vide. Effectivement, cela dit: Ne faites rien pendant que «c» n'est pas une nouvelle ligne, ce qui sera vrai pour toujours. Supprimez ce point-virgule. –