将不正确的值类型分配给struct属性时的笑脸!

时间:2009-08-31 02:30:44

标签: c++ struct types variable-assignment

我有点想知道我是否会失去理智,但我发誓,这段代码输出笑脸作为.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

我知道该代码是无用的,
我想知道为什么给我的SMILEY面临更多错误

安慰。 。 。嘲笑

5 个答案:

答案 0 :(得分:9)

  

我想知道为什么给我的SMILEY面临错误

因为数据类型为string,而char 0x01会打印出笑脸。您可能会以ASCII为单位分配值0x31,即字符1

答案 1 :(得分:8)

笑脸是ASCII值为1的字符。不知道为什么,但显然你的编译器决定把它当作char,所以你得到笑脸。

答案 2 :(得分:6)

你的问题在这里:

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

我应该注意,你得到的符号是ASCII 1(即,你正在设置lineData.name)。

  

while( getline(myFile, line) )

你需要接受它并解析它,在lineData.name中插入一个正确的字符串,然后在lineData.grade中插入一个整数。

答案 3 :(得分:3)

为字符串分配了一个字符值(1),恰好是ASCII字符集中的笑脸。

答案 4 :(得分:2)

就像其他人所说的名字是字符串类型一样,所以最好给它分配一个字符串:

lineData.name = "1";

反转的逗号会让编译器知道这个值是一个字符串,你就会停止获得笑脸。

那说......

最酷。错误。如初。