C++ 数组和字符串的问题 //库 #包括 #包括 使用名称空间std; int main(){ srand(time(NULL));//初始化随机种子 const char arrayNum[4]={'5','6','7','8'}; int RandIndex=rand()%4;//生成一个介于0和之间的随机数 我怀疑问题在于数组的类型,我将尝试解释:

C++ 数组和字符串的问题 //库 #包括 #包括 使用名称空间std; int main(){ srand(time(NULL));//初始化随机种子 const char arrayNum[4]={'5','6','7','8'}; int RandIndex=rand()%4;//生成一个介于0和之间的随机数 我怀疑问题在于数组的类型,我将尝试解释:,c++,arrays,string,C++,Arrays,String,由于数组的类型为char,因此可以存储一个字符,而不是一个数字。但随后,您将该字符分配给 //libraries #include <iostream> #include <stdlib.h> using namespace std; int main(){ srand ( time(NULL) ); //initialize the random seed const char arrayNum[4] = {'5', '6', '7', '8'};

由于数组的类型为
char
,因此可以存储一个字符,而不是一个数字。但随后,您将该字符分配给

//libraries
#include <iostream>
#include <stdlib.h>
using namespace std;

int main(){

  srand ( time(NULL) ); //initialize the random seed


  const char arrayNum[4] = {'5', '6', '7', '8'};
  int RandIndex = rand() % 4; //generates a random number between 0 and
  cout << arrayNum[RandIndex];
  int ceva = arrayNum[RandIndex] ;

  if (ceva == 6){

    cout << "hey";

  }

  else{

    cout << "nu";

  }

}
当您将一个字符赋给一个数字时,至少在C语言中是这样,它不会直接赋给该数字,而是赋给该字符编码的十进制表示形式

因此,如果您执行
inti='0'
,例如,在中,它将分配给i
48
,这是它的十进制表示形式

现在,对于解决方案:

  • 简单且“正确”的方法应该是将数组更改为数字,而不是字符,或者更改if以与字符进行比较
  • 如果由于某种原因您不能执行1,那么在将字符分配给数字do
    -'0'
    时,它看起来像
    int-ceva=arrayNum[randex]-'0'
    。这将进行破解,因为对于
    '1'
    (unicode),您正在执行
    49-48
    ,对于
    '2'
    =
    50-48

  • 尝试<代码>(CeVa==6)< /C>。什么是“ASCII HEX”?<代码> > 0' <代码>,您的(ASCII)系统上可能有48的值,但是请记住C++(和C)可以与任何编码一起工作,所以<代码> '0' < /C> >可以是240,或者确实是任何其他代码> char 值。当然,便携式代码通常不需要知道。简单而“正确”的方法应该是将数组更改为数字,而不是字符为什么不是相反的方法呢?它应该也适用于OP的例子。我认为这两种方法都是正确的。
    48
    不是
    0
    的十六进制代码,而是十进制代码。
    0
    的十六进制代码。HolyBlackCat:谢谢,完全正确!我误读了ascii手册页的列,呵呵。|托比斯佩特:我不知道,谢谢!我会编辑答案以便更准确一些乌拉特| |梅勒比乌斯:你说得对,我也要补充一点
    int ceva = arrayNum[RandIndex];