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'
,例如,在中,它将分配给i48
,这是它的十进制表示形式
现在,对于解决方案:
-'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];