3 votes

Visage souriant lors de l'attribution d'un type de valeur inapproprié à une propriété struct !

Je me demande si je ne perds pas la tête, mais je vous jure que ce code génère des smileys comme valeurs de .name ! Que se passe-t-il ? Jusqu'à présent, il semble que cela ne fonctionne que lorsque la valeur est 1, tout le reste donne des erreurs.

Je me rends compte que le code est défectueux -> je n'ai pas besoin d'aide à ce sujet.

#include <iostream>
#include <fstream>
#include <regex>
#include <string>
#include <list>

using namespace std;
using namespace tr1;

struct CollectedData
{
public:
    string name;
    float grade;

};

int main()
{
    string line;
    list<CollectedData> AllData;
    int count;

    ifstream myFile("test_data.txt");
    if (myFile.fail()) {cout << "Error opening file"; return 0;}
    else
    {
        cout << "File opened... \n";
        while( getline(myFile, line) ) {
            CollectedData lineData;
            lineData.name = 1;
            lineData.grade = 2;
            AllData.push_back(lineData);
        }
    }

    cout << "\n\n File contents: \n";

    list<CollectedData>::iterator Iterator;
    for(Iterator = AllData.begin(); 
            Iterator != AllData.end();
            Iterator++)
    {
        cout << "\t" << (*Iterator).name << " - ";
        cout << "\t" << (*Iterator).grade << "\n";
    }

    getchar();
    return 1;
}

:-) http://img21.imageshack.us/img21/4600/capturekjc.jpg

JE SAIS QUE LE CODE EST INUTILE,
JE VEUX SAVOIR POURQUOI JE REÇOIS DES SMILEYS AU LIEU D'ERREURS.

réconfortant. . . moqueur

9voto

Noon Silk Points 30396

JE VEUX SAVOIR POURQUOI JE REÇOIS DES SMILEYS AU LIEU D'ERREURS.

Parce que le type de données est string et le char 0x01 imprime un visage souriant. Vous pouvez éventuellement attribuer la valeur 0x31 à la place, qui est le caractère 1 en ASCII.

8voto

Tal Pressman Points 4120

Le visage souriant est le caractère avec la valeur ASCII 1. Je ne sais pas pourquoi, mais apparemment votre compilateur a décidé de le traiter comme un caractère, et vous obtenez donc le smiley.

6voto

Matthew Iselin Points 5843

Votre problème est ici :

lineData.name = 1;
lineData.grade = 2;

Je dois noter que les symboles que vous obtenez sont ASCII 1 (c'est-à-dire exactement ce que vous avez défini dans lineData.name).

while( getline(myFile, line) )

Vous devez prendre la ligne et l'analyser, en insérant une chaîne de caractères appropriée dans lineData.name, et en insérant un nombre entier dans lineData.grade.

3voto

Josh Matthews Points 4026

La chaîne se voit attribuer une valeur de caractère (1), qui se trouve être un smiley dans le jeu de caractères ASCII.

2voto

0xC0DEFACE Points 2212

Comme d'autres l'ont dit, le nom est de type chaîne, il serait donc préférable de lui attribuer une chaîne :

lineData.name = "1";

les guillemets permettront au compilateur de savoir que cette valeur est une chaîne de caractères, et vous n'obtiendrez plus de smileys.

cela dit...

Le plus cool. Bug. Jamais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X