我正在 SDL 中试验 2D 游戏中的动作,效果很好。然而,当我添加角色通过按 进行射击的可能性时SPACE,我遇到了一个奇怪的错误:如果已经按下了向下和向右键或向上和向左键,则按 时不会创建任何事件SPACE。在其他情况下,会按其应有的方式创建事件。
这是我用来获取一些事件的循环:
while (on == 1)
{
SDL_PollEvent(&event);
switch (event.type)
{
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
on = 0;
break;
case SDLK_UP:
shooter1.dir[0] = 1; // shooter1 is an instance of a structure that
// contains a position and an array representing
// 4 directions (down, up, left, right)
break;
case SDLK_DOWN:
shooter1.dir[1] = 1;
break;
case SDLK_LEFT:
shooter1.dir[2] = 1;
break;
case SDLK_RIGHT:
shooter1.dir[3] = 1;
break; …Run Code Online (Sandbox Code Playgroud) 我正在自定义我的 zsh 终端,但是在将我的提示变为粗体时遇到了困难。我尝试了几种不同的方法,但都没有奏效,而它确实适用于互联网上的人们......
所以这是我的测试提示。两个“HEY”都是颜色 1,但第二个“HEY”应该是粗体。显然不是,取而代之的是,我得到了一些华丽的红色,就像我提示的第一部分一样,颜色为 9。wtf :)
这是我在这种情况下使用的代码:
HEY%BHEY%b
Run Code Online (Sandbox Code Playgroud)
我还注意到它对前 8 种颜色中的每一种都做同样的事情:黑色变成灰色,灰色变成白色,夜蓝色变成深蓝色,叶绿色变成亮绿色,粉红色、黄色也一样......
我还尝试对模数使用一些转义序列,但都没有奏效:每次,模数都将其旁边的字符作为参数,其余代码将像普通字符一样显示。例如,这个:
PS1="%{\e[1;33%}test"
Run Code Online (Sandbox Code Playgroud)
会显示这个:
\e[1;33test
Run Code Online (Sandbox Code Playgroud)
有人可以解释我这里出了什么问题,以及我如何修复它以获得一些(真实的)粗体提示文本?
char *str;
str = malloc(sizeof(char) * 5);
Run Code Online (Sandbox Code Playgroud)
此代码为变量分配5个连续的内存槽,该变量str属于类型char *.
char *str;
str = malloc(sizeof(char *) * 5);
Run Code Online (Sandbox Code Playgroud)
这应该分配char数组的5倍内存.但是因为在我们声明它之前,char数组没有大小,所以这个语句实际上做了什么?
我试图了解如何在 C 中使用递归,但我不知道return它是如何工作的。
请考虑以下代码:
int recur(int i)
{
printf("recur: i = %d\n", i);
if (i < 3)
{
recur(i + 1);
return 10;
}
else if (i < 5)
recur(i + 1);
return i;
}
int main(void)
{
int i = 0;
i = recur(i);
printf("i = %d\n", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
recur: i = 0
recur: i = 1
recur: i = 2
recur: i = 3
recur: i = 4
recur: i = 5
i …Run Code Online (Sandbox Code Playgroud) 在我看来,struct new_element *element = malloc(sizeof(*element))创建一个类型元素的结构,而我认为它只会创建一个指向它的指针.以下代码向我证明我错了:
struct new_element
{
int i;
struct new_element *next;
};
int main(void)
{
struct new_element *element = malloc(sizeof(*element));
element->i = 5;
element->next = NULL;
printf("i = %d, next = %p\n", element->i, element->next);
}
Run Code Online (Sandbox Code Playgroud)
输出:
i = 5, next = (nil);
Run Code Online (Sandbox Code Playgroud)
element->i得到值5并element->next给出值NULL.难道这不是意味着该element点的结构,这将意味着有是所创建的结构?我认为这malloc只会给出一个指针所需的内存大小.
我想知道函数memcmp必须返回什么.
我一直在互联网上搜索,通常,memcmp定义说明如下:
memcmp()函数返回一个大于,等于或小于零的整数,因为s1指向的对象大于,等于或小于s2指向的对象.
这是从来没有明确说什么,究竟,则返回:这是两个字节的值之间的差异,或者是-1,0或1?我很迷惑:
memcmp在小程序中测试函数时,即使评估的两个字节之间的差值大于1或小于-1,它也会返回-1,0或1.memcmpInternet上命名的函数时,它们几乎都返回2个字节之间的差异,作为int,而不是返回-1,0或1.由于我无法得到足够精确的函数定义memcmp,我在这里问这个问题:究竟是什么函数memcmp应该返回?在某处有"官方"源代码吗?(我已经看过很多源代码,memcmp但没有给我一个答案:我假设它们不是写在库string.h中的函数,至少不在我的计算机上......)
使用此代码:
input = gets.chomp.downcase!
puts input
Run Code Online (Sandbox Code Playgroud)
如果输入中至少有一个大写字母,输入将被放在屏幕上,没有其大写字母.但是如果输入没有大写字母,它就会放置nil,就像没有写入任何东西一样.
我希望我的输入完全落后; 如果它是一个没有大写字母的字符串,它应该返回相同的字符串.
我想过这样的事情:
input = gets.chomp
if input.include(uppercase) then input.downcase! end
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我希望有人知道我应该怎么做.
我想在SDL中创建一个塔防游戏.在开始这个项目之前,我会尝试编写游戏时需要做的所有事情.在我正在进行的测试中,有一个塔(静态物体),在其范围内的目标(移动物体),以及从炮塔发射到目标的射击(移动物体).我没有做的是找到一种方法让'射击'物体成为一个方向.通过射击物体,我的意思是当目标在范围内时由塔发射的物体.此外,无论方向如何,射击应始终具有相同的速度,这禁止使用配方dirx = x2 - x1.
射击是定义如下的结构:
typedef struct shoot
{
SDL_Surface *img; // Visual representation of the shoot object.
SDL_Rect pos; // Position of the object, it's a structure containing
// coordinates x and y (these are of type int).
int index;
float dirx; // dirx and diry are the movement done by the shoots object in
// 1 frame, so that for each frame, the object shoot is moved dirx
// pixels on the axis …Run Code Online (Sandbox Code Playgroud) 当我使用时SEEK_END,我希望它对应于流中最后一个字符的位置.但是在printf中,它似乎没有.
我有一个包含1010个字符的文件.我打开它fopen,然后我尝试打印此文件的最后一个字符的位置:
printf("Last position is: %d\n", SEEK_END);
Run Code Online (Sandbox Code Playgroud)
输出是Last position is: 2我预期的结果Last position is: 1010.2不对应于最后一行或最后一列,因为我有101行,每行10个字符.我不知道它是什么.
奇怪的是,这段代码效果很好:
fseek(file, 0, SEEK_END);
printf("Last position is: %d\n", ftell(file));
Run Code Online (Sandbox Code Playgroud)
输出是Last position is: 1010.但问题是我正在移动文件中的虚拟光标,这是我不想要的.
如何打印值SEEK_END而不必更改虚拟光标的位置,更重要的是,为什么printf输出2?