2014-06-19 5 views
0

Premier message. S'il vous plaît laissez-moi savoir si j'ai manqué quelque chose, ou si vous avez besoin de plus d'informations. Ok, donc ce que j'essaie de faire ici, c'est de lire les données d'un fichier texte dans Turbo C++ 3.0, puis de sortir ce texte.Lecture à partir d'un fichier texte dans Turbo C++ 3.0

Voici mon code (mise à jour):

ifstream playerData("players.txt"); 
const int size = 100; 
char* dataArray = new char[size]; 

while(!playerData.eof()){ 
    for(int i=0; i<size; i++){ 
     playerData>>dataArray[i]; 
     if(dataArray[i]=='\n'){ 
      cout<<"\n"; 
     } 
     cout<<dataArray[i]; 
    } 
} 

Si je le texte suivant dans le fichier players.txt:

ABC - 7 minutes 
DEF - 4 minutes 

Ensuite, c'est ce qui est sorti:

ABC-7minutesDEF-4minutes 
+0

Quelle version de Turbo C++? –

+0

@MattMcNabb Version 3.0 – user3755083

Répondre

4

Je ne sais pas ce que &(dataArray[i])=="\n" est censé être. On dirait que vous avez juste deviné les choses jusqu'à ce que les erreurs du compilateur disparaissent. Ce n'est pas un bon moyen de coder n'importe quelle langue, et encore moins de C++. Ce que vous avez écrit teste si l'élément dataArray[i] vit à la même adresse mémoire que le tableau littéral "\n". Ils n'ont certainement pas, donc ce test échouera toujours.

Si vous voulez comparer avec un caractère, écrivez if (dataArray[i] == '\n'). Cependant, ce serait encore une erreur car dataArray[i] n'a pas encore reçu de valeur. Vous devez déplacer la ligne à après vous avez lu dans dataArray[i].

Autres problèmes:

  • Vous déborder le tampon, changer i<=size-i < size
  • Vous utilisez new sans raison; utilisez un tableau à la place
  • Vous ne vérifiez pas si votre opération >> a réussi.
  • while(!playerData.eof()) est une erreur; au contraire, vous devez casser quand >> échoue

En outre, Turbo C++ 3.0 est sorti avant le premier C++ standard, il est donc pas une bonne idée de l'utiliser pour C++. En résumé:

  • apprendre d'un livre, pas d'essais et d'erreurs
  • Obtenir un compilateur moderne (il y a bons gratuits)
+0

Merci pour cela, je garderai cela à l'esprit. J'ai mis à jour le code mais il ne fonctionne toujours pas. Serait-ce parce que playerData >> dataArray [i]; ne lit pas dans les sauts de ligne? – user3755083

+0

Oui, '>>' est * formaté en entrée * et ignore les espaces dans ce cas. Si vous voulez des données non formatées, utilisez 'playerData.get (dataArray [i])'. En Standard C++, vous pouvez obtenir une ligne entière à la fois, même si je ne suis pas sûr si Turbo C++ 3.0 a cette fonctionnalité. –

+0

Génial! Merci, ça fonctionne. Je pense que vous avez raison de dire que je devrais utiliser un compilateur plus récent. – user3755083

1

Vous comparez l'adresse de e caractère avec l'adresse de const littéral "\n" qui est inutile. Pour comparer un caractère avec le caractère \n, vous devez utiliser des guillemets simples: '\n' et supprimer l'opérateur & également.

if (dataArray[i]=='\n') 

Oublier Turbo C++ et utiliser de nouveaux compilateurs modernes


Après la mise à jour

Vous devriez essayer d'utiliser STL et gérés conteneurs plutôt et vos trucs de pointeur et new/delete. De plus, tester par .eof() n'est pas une bonne pratique, utilisez l'objet lui-même. Et pour obtenir une ligne, vous pouvez utiliser la fonction std::getline. Réécriture votre code dans un nouveau compilateur standard:

ifstream playerData("players.txt"); 

while(playerData) { 

    string dataArray; 

    getline(playerData, dataArray); 

    cout << dataArray << '\n'; 
} 
Questions connexes