为结构属性分配不正确的值类型时的笑脸!

Posted

技术标签:

【中文标题】为结构属性分配不正确的值类型时的笑脸!【英文标题】:Smiley face when assigning improper value type to struct property! 【发布时间】:2010-11-24 05:49:44 【问题描述】:

我有点想知道我是不是疯了,但我向你发誓,这段代码输出笑脸作为 .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

我知道代码没用, 我想知道为什么它给了我笑脸而不是错误

安慰。 . .嘲讽

【问题讨论】:

那个笑脸是字符 0x01。 +1,情况和对它的轻微愤怒让我发笑。 码表:en.wikipedia.org/wiki/Code_page_437#Characters 【参考方案1】:

我想知道为什么它给了我笑脸而不是错误

因为数据类型是string,而字符0x01 打印出笑脸。您可能应该分配值0x31,而不是使用ASCII 字符1

【讨论】:

或者值'1',这是写字符1的一种可移植方式【参考方案2】:

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

【讨论】:

笑脸不是 ASCII 字符。它位于 IBM-PC(MS-DOS 代码页 437)集中。【参考方案3】:

你的问题在这里:

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

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

while( getline(myFile, line) )

您需要获取该行并对其进行解析,将适当的字符串插入 lineData.name,并将整数插入 lineData.grade。

【讨论】:

这与空终止无关。 我从“面孔”假设有多个,一个接一个。重新阅读问题时,这似乎是一个糟糕的假设,所以我编辑了答案。 另外,当我发帖时,我在一个阻止图像的代理后面。所以我用我掌握的信息凑合了。【参考方案4】:

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

【讨论】:

【参考方案5】:

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

lineData.name = "1";

反逗号会让编译器知道这个值是一个字符串,你将不再得到笑脸。

说...

最酷。漏洞。永远。

【讨论】:

以上是关于为结构属性分配不正确的值类型时的笑脸!的主要内容,如果未能解决你的问题,请参考以下文章

如何在plsql中将对象类型属性的值分配给具有相同属性属性的不同对象类型?

如何正确地将值分配给数组(结构类型)元素?

如何初始化(或分配)具有特定默认值的结构(抽象数据类型)成员的值

无法将“Int”类型的值分配给“String”类型?在 (cellForRowAt) 中使用 Tableview

在java中运行时将DBus Variant的值转换为正确的类型

golang 从 map 获取值时的值拷贝问题