控制台输出笑脸

console outputs smiley face

本文关键字:笑脸 输出 控制台      更新时间:2023-10-16

我有这个代码:

#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。感谢

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

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

您已经为它分配了值1、2和3,但该变量的类型是char,因此它被解释为ascii。如果你在ascii图表上查找值为2的字符,你会发现它是一个笑脸。所以它确实在做你要求它做的事情

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

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

据我所见,您正在尝试输出第一个数组元素。但是,您正在打印第二个数组(数组的索引从0开始,而不是从1开始)。第二个元素是2。现在,请看一下这张表,你可以看到:数字2是一个笑脸。问题是,您输出的字符代码为2,而不是"2"。为了输出平分,让你的数组看起来像这样:

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

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

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

KC