这是一个具体的问题,但我似乎无法弄清楚出了什么问题.
else if (X == 2)
//move left
{
if (Level[X-1][Y] == 0);
{
cout << Level[X-1][Y] << "\n";
cout << "\n MOVING LEFT from RIGHT\n"; //PROBLEM IS HERE
Level[X][Y] = 1; // block it
X = X - 1;
moved = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在做的是我正在检查Level [X-1] [Y]是否为1,表示一列,所以我无法将我的播放器移动到那里.但是由于某种原因,尽管它是1而不是0(如输出所示),仍然可以访问IF语句.任何帮助将不胜感激.
所以我正在制作一个游戏,你是老板和招聘员工,我以前用过rand,但由于某种原因它现在不能正常工作:
生成随机数的代码:
class employee
{
public:
int getSkills(int askingPrice)
{
srand((unsigned)time(0));
switch(askingPrice)
{
case 1: //point of this is so if askingPrice is from 1 to 5 it will execute the same code
case 2:
case 3:
case 4:
case 5:
skills = rand() % 5 + 1;
}
return skills;
}
int returnSkills()
{
return skills;
}
int getPaid(int askingPrice)
{
srand((unsigned)time(0));
switch(askingPrice)
{
case 1:
case 2:
case 3:
case 4:
case 5:
paid = rand() …Run Code Online (Sandbox Code Playgroud) 我试图通过Delphi中的USB端口连接到Graphtec绘图仪.以下是C++代码的snipet由制造商提供:
#include <windows.h>
#include <stdio.h>
typedef HANDLE (APIENTRY *PROC_GITK_OPENUSB)(int, int, DWORD);
int main(int argc, char* argv[])
{
HMODULE hUsbLib = LoadLibrary("GITKUSBP.DLL");
PROC_GETK_OPENUSB lpfnGITK_OpenUsb = (PROC_GITK_OPENUSB)GetProcAddress(hUsbLib, "GITK_OpenUsb");
HANDLE hWrite = (lpgnGITK_OpenUsb)(0, 0, FILE_FLAG_OVERLAPPED);
HANDLE hRead = (lpgnGITK_OpenUsb)(0, 1, FILE_FLAG_OVERLAPPED);
OVERLAPPED WriteEvt, ReadEvt;
}
Run Code Online (Sandbox Code Playgroud)
当然,还有更多内容,但这似乎是关键代码.在Delphi中,我尝试翻译并不成功.我要么需要一些翻译专业知识,要么将C++代码转换成我可以从Delphi调用的dll的一些指导.
嗨,我想生成2个值之间的随机数.我有2个变量.这是默认值:(MIN = MAX = 1)
以后这个值可以改变!
我用过这个:
rand()%(max-min)+min;
Run Code Online (Sandbox Code Playgroud)
但是我得到了关于除零的调试.有任何想法吗?
编辑:使用默认值生成的数字必须为1.
因此printf()是一个函数,如果发生错误,它返回成功或负值时写入的字符数,看这个例子,预期的输出为零.
#include <stdio.h>
int main(void)
{
printf("%d");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在当我添加更多这些%d: http ://ideone.com/brw5vG输出更改为: 0 134513819 -1216430092 134513808
我无法弄清楚随机垃圾值是什么?输出中也有负值,负值可以证明错误是正确的,所以任何人都可以确切地指出这里的错误是什么吗?请简明扼要,具体.谢谢.
我的代码:
long long difft, intrv ;
cout << "difft = " << difft << endl;
cout << "intrv = " << intrv << endl;
cout << "difft mod intrv = " << difft%intrv << endl;
Run Code Online (Sandbox Code Playgroud)
输出:
difft = 0
intrv = 0
difft mod intrv = 1
Run Code Online (Sandbox Code Playgroud)
0%0的结果为零,但在我的代码中结果为"1",为什么?
main()
{
char *c="abhishek";
int i;
c[2]=90;
for(i=0;i<12;i++)
{
printf("%c",c[0])
}
}
Run Code Online (Sandbox Code Playgroud)
这里的输出是abZishek.但这会导致总线错误,因为这是一个字符串文字,我们无法更改其值.为什么c变化的价值?
我对C中的postfix和前缀运算符优先级感到困惑,任何帮助和提示都会有所帮助.
我会在这里粘贴我的测试代码:
#include <stdio.h>
int a = 0;
int main(int argc, char *argv[])
{
if (++a & 0x01) // prefix version
// if (a++ & 0x01) // postfix version
{
printf("++ first\n");
}
else
{
printf("& first\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我现在可以理解,在postfix版本中,虽然postfix ++有一个更大的优先级,但是a++会返回0到这里&,0x01并且会a在此表达式后增加值.
但我无法理解的是为什么在前缀版本中,为什么++a首先进行评估?运算符优先级表指示prefix ++并&具有相同的优先级,此外,它们的关联性为right-to-left.这种方法&不应该先评估吗?
编辑: 我正在使用的图表:C运算符优先表
a是带符号的int并且包含-100 b是unsigned int并且包含500
a<b returns FALSE!!
Run Code Online (Sandbox Code Playgroud)
为什么到地球?:P
我可以将b转换为signed int并获得正确的结果,但是保持原样而不是结果让我感到惊讶,因为我不知道为什么-100 <500应该是假的,就像编译器转换为无符号类型一样自动(这显然不是程序员要求的).
如果我们保持原样,即第一个签名和第二个未签名,那么为什么要这样做
这真的很混乱.
现在我必须纠正我的所有代码,寻找有符号和无符号整数之间的比较,并将这两个变量转换为我的意思.: - /
在混合有符号和无符号类型时,我还需要注意其他任何情况吗?
请不要回答显而易见的"一般情况下使用无符号类型是不可取的,为什么不坚持只使用签名类型?你会更安全".谢谢.
干杯.
十进制数4294967295等于十六进制0xFFFFFFFF,所以我希望文字具有相同的类型,无论它表达的是什么基础,
std::is_same<decltype(0xFFFFFFFF), decltype(4294967295)>::value; //evaluates false
Run Code Online (Sandbox Code Playgroud)
似乎在我的编译器decltype(0xFFFFFFFF)上unsigned int,decltype(4294967295)是signed long.