控制台输出笑脸

时间:2014-09-12 19:23:28

标签: c++ visual-studio-2010

我有这段代码:

#include "stdafx.h"
#include <iostream>

typedef struct{
    int s1;
    int s2;
    char c1;
    char* arr;
}inner_struc;


int _tmain(int argc, _TCHAR* argv[])
{
    inner_struc myinner_struct;
    myinner_struct.s1 = myinner_struct.s2 = 3;
    myinner_struct.c1 = 'D';
    char arr[3] = {1,2,3};
    myinner_struct.arr = arr;

    std::cout << "first array element: " << myinner_struct.arr[1] << std::endl;
    return 0;
}

我想知道为什么我会得到一个笑脸而不是第一个数组元素!我在这做错了什么?它编译并运行正常,但输出

  

第一个数组元素:“笑脸”

这意味着什么? 我正在使用Visual Studio 2010.谢谢

3 个答案:

答案 0 :(得分:2)

您正在输出此数组中的第二个元素:

char arr[3] = {1,2,3};

您已为其分配值1 2和3,但该变量的类型为char,因此它被解释为ascii。如果你在ascii图表上查找哪个字符的值为2,你会看到它是一张笑脸。所以它确实按照你的要求去做。

http://mathbits.com/MathBits/CompSci/Introduction/ASCIIch.jpg

您对输出的期望是什么?如果您希望它是一个数字,那么您必须将该数字的字符表示添加到数组中。即代替123使用'1''2''3'

答案 1 :(得分:1)

inner_struct.arr被声明为char *,这意味着它包含一个字符数组(字节)。你想要一个数组来保存数字1,2,3吗?如果是这样,请使用int。如果需要字母,请使用以下命令初始化数组:

  char arr[3] = { 'a', 'b', 'c' };

KC

答案 2 :(得分:1)

到目前为止,正如我所看到的,您正在尝试输出第一个数组元素。但相反,您正在打印第二个(数组从0开始索引,而不是1)。第二个元素是2.现在,请看一下this table,你可以看到:数字2是笑脸。问题是你输出的代码是2,而不是'2'。为了输出deuce,让你的数组看起来像这样:

char arr[3] = {'1','2','3'};