Смайлик при назначении неправильного типа значения для свойства struct! - PullRequest
3 голосов
/ 31 августа 2009

Мне несколько интересно, схожу ли я с ума, но клянусь вам, этот код выводит смайлики в качестве значений .name !! Что происходит в мире? До сих пор кажется, что он работает только при значении 1, все остальное правильно выдает ошибки.

Я понимаю, что код неисправен -> Мне не нужна помощь в этом.

#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

Я знаю, что код бесполезен,
Я ХОЧУ ЗНАТЬ, ПОЧЕМУ ЭТО ДАЕТ МЕНЯ УЛЫБАЕТСЯ ВМЕСТО ОШИБОК

утешительное. , , насмешливый

Ответы [ 5 ]

9 голосов
/ 31 августа 2009

Я ХОЧУ ЗНАТЬ, ПОЧЕМУ ЭТО ДАЕТ МЕНЯ УЛЫБАЕТСЯ ВМЕСТО ОШИБОК

Поскольку тип данных string, а символ 0x01 печатает улыбающееся лицо. Возможно, вам стоит присвоить значение 0x31 вместо символа 1 в ASCII.

8 голосов
/ 31 августа 2009

Улыбающееся лицо - это символ со значением ASCII 1. Не знаю почему, но, очевидно, ваш компилятор решил рассматривать его как символ, поэтому вы получите смайлик.

6 голосов
/ 31 августа 2009

Ваша проблема здесь:

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

Я должен отметить, что символы, которые вы получаете, являются ASCII 1 (то есть, именно то, что вы устанавливаете для lineData.name).

while( getline(myFile, line) )

Вам нужно взять строку и разобрать ее, вставить правильную строку в lineData.name и вставить целое число в lineData.grade.

3 голосов
/ 31 августа 2009

Строке присваивается символьное значение (1), которое является смайликом в наборе символов ASCII.

2 голосов
/ 31 августа 2009

Как и другие, говорят, что имя относится к типу string, поэтому было бы лучше присвоить ему строку:

lineData.name = "1";

кавычки сообщат компилятору, что это значение является строкой, и вы перестанете получать смайлики.

что сказал ...

Самое холодное время. Ошибка. Когда-либо.

...