小编nou*_*oir的帖子

如果已按下向下+向右或向上+向左,则不会发生空格键按下的 SDL 事件

我正在 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)

c sdl

4
推荐指数
1
解决办法
851
查看次数

我的 zsh 提示不是粗体

我正在自定义我的 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)

有人可以解释我这里出了什么问题,以及我如何修复它以获得一些(真实的)粗体提示文本?

zsh prompt zshrc oh-my-zsh

3
推荐指数
3
解决办法
6581
查看次数

分配大小为char*的内存有什么作用?

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 malloc pointers allocation dynamic-memory-allocation

3
推荐指数
1
解决办法
1447
查看次数

在递归函数中返回

我试图了解如何在 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)

c recursion return-value function-definition

2
推荐指数
1
解决办法
1万
查看次数

声明一个指向struct的指针会创建一个struct?

在我看来,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只会给出一个指针所需的内存大小.

c struct pointers

2
推荐指数
1
解决办法
246
查看次数

什么,确切地说,memcmp应该返回?

我想知道函数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中的函数,至少不在我的计算机上......)

c standard-library memcmp language-lawyer

2
推荐指数
2
解决办法
1345
查看次数

Ruby`downcase!`返回`nil`

使用此代码:

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)

但这不起作用.我希望有人知道我应该怎么做.

ruby

0
推荐指数
2
解决办法
456
查看次数

给移动物体指明方向

我想在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)

math sdl

0
推荐指数
1
解决办法
99
查看次数

C:SEEK_END在printf中显示意外值

当我使用时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

c

-2
推荐指数
1
解决办法
135
查看次数