为什么默认大小写 运行 不在这里?

Why doesn't the default case run here?

我写了以下几行代码:

#include <sdl.h>
#include <iostream>
#include <stdio.h>
#include <string>

bool running = true;
enum KeyPressSurfaces {

    KEY_PRESS_SURFACE_DEFAULT,
    KEY_PRESS_SURFACE_UP,
    KEY_PRESS_SURFACE_DOWN,
    KEY_PRESS_SURFACE_LEFT,
    KEY_PRESS_SURFACE_RIGHT,
    //de deallocate surface
    KEY_PRESS_SURFACE_TOTAL

};

int main(int argc, char** argv) {

    //standard stuffs
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window* window = SDL_CreateWindow("vibin' with smug pika", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 300, 300, 0);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    SDL_Surface* loadSurface(std::string path);
    SDL_Surface* surface = SDL_GetWindowSurface(window);
    SDL_Surface* keypress [KEY_PRESS_SURFACE_TOTAL];
    //anh hien tai dang duoc load, de BlitSurface len surface
    //SDL_BlitSurface(current --> surface)
    SDL_Surface* current = NULL;
    //set windows icon
    SDL_Surface* icon = SDL_LoadBMP("../pikachu/keypress_bmp/icon.bmp");
    SDL_SetWindowIcon(window, icon);
    SDL_Event event;

    //load each image into the keypress array
    keypress[KEY_PRESS_SURFACE_DEFAULT] = SDL_LoadBMP("../pikachu/keypress_bmp/default.bmp");
    keypress[KEY_PRESS_SURFACE_UP] = SDL_LoadBMP("../pikachu/keypress_bmp/up.bmp");
    keypress[KEY_PRESS_SURFACE_DOWN] = SDL_LoadBMP("../pikachu/keypress_bmp/down.bmp");
    keypress[KEY_PRESS_SURFACE_LEFT] = SDL_LoadBMP("../pikachu/keypress_bmp/left.bmp");
    keypress[KEY_PRESS_SURFACE_RIGHT] = SDL_LoadBMP("../pikachu/keypress_bmp/right.bmp");


    while (running) {

        while (SDL_PollEvent(&event)){
            switch (event.type) {
            //user click x
            case SDL_QUIT:
                running = false;
                break;
            //where all the user inputs are handled
            case SDL_KEYDOWN:
                switch (event.key.keysym.sym) {
                case SDLK_UP:
                    current = keypress[KEY_PRESS_SURFACE_UP];
                    break;
                case SDLK_DOWN:
                    current = keypress[KEY_PRESS_SURFACE_DOWN];
                    break;
                case SDLK_LEFT:
                    current = keypress[KEY_PRESS_SURFACE_LEFT];
                    break;
                case SDLK_RIGHT:
                    current = keypress[KEY_PRESS_SURFACE_RIGHT];
                    break;
                case SDLK_SPACE:
                    current = keypress[KEY_PRESS_SURFACE_DEFAULT];
                    break;
                default:
                    current = keypress[KEY_PRESS_SURFACE_DEFAULT];
                }
            }
        }
        SDL_BlitSurface(current, NULL, surface, NULL);
        SDL_UpdateWindowSurface(window);
    }

    //deallocating surfaces
    for(int i=0; i<KEY_PRESS_SURFACE_TOTAL; ++i) {
        SDL_FreeSurface(keypress[i]);
        keypress[i] = NULL;
    }

    //destroy everythangggg
    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(renderer);
    SDL_Quit();
    return 0;
}

不过,这个位:

                default:
                    current = keypress[KEY_PRESS_SURFACE_DEFAULT];

根本不会运行,不管我把它放在哪里。程序一开始应该显示默认图像,但我编译时只有黑色。其他一切 运行 都很好,我无法确定我犯了什么错误。

我使用的是 CodeBlock 版本 20.03 和最新版本的 SDL2。

我为你创建了一个解决方案,我有一些笔记要你检查,

  1. 检查文件路径是否正确 ../pikachu/keypress_bmp/default.bmp.
  2. 当你想触发默认时,你应该按另一个键 e.i输入A、B等
  3. 我下载了一个SDL库不知道你用的是不是 一样,不过我的是V2.
  4. 我已经评论了你的代码,我没有在图片中使用它 路径。

这是我的代码和结果:

//#include <sdl.h>
#include <SDL.h>
#include <iostream>
#include <stdio.h>
#include <string>

bool running = true;
enum KeyPressSurfaces {

    KEY_PRESS_SURFACE_DEFAULT,
    KEY_PRESS_SURFACE_UP,
    KEY_PRESS_SURFACE_DOWN,
    KEY_PRESS_SURFACE_LEFT,
    KEY_PRESS_SURFACE_RIGHT,
    //de deallocate surface
    KEY_PRESS_SURFACE_TOTAL

};

int main(int argc, char** argv) {

    //standard stuffs
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window* window = SDL_CreateWindow("vibin' with smug pika", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 300, 300, 0);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    SDL_Surface* loadSurface(std::string path);
    SDL_Surface* surface = SDL_GetWindowSurface(window);
    SDL_Surface* keypress[KEY_PRESS_SURFACE_TOTAL];
    //anh hien tai dang duoc load, de BlitSurface len surface
    //SDL_BlitSurface(current --> surface)
    SDL_Surface* current = NULL;
    //set windows icon
    //SDL_Surface* icon = SDL_LoadBMP("../pikachu/keypress_bmp/icon.bmp");
    SDL_Surface* icon = SDL_LoadBMP("C:/Users/Awat/Desktop/bmp/img1.bmp");
    SDL_SetWindowIcon(window, icon);
    SDL_Event event;

    //load each image into the keypress array
    /*
    keypress[KEY_PRESS_SURFACE_DEFAULT] = SDL_LoadBMP("../pikachu/keypress_bmp/default.bmp");
    keypress[KEY_PRESS_SURFACE_UP] = SDL_LoadBMP("../pikachu/keypress_bmp/up.bmp");
    keypress[KEY_PRESS_SURFACE_DOWN] = SDL_LoadBMP("../pikachu/keypress_bmp/down.bmp");
    keypress[KEY_PRESS_SURFACE_LEFT] = SDL_LoadBMP("../pikachu/keypress_bmp/left.bmp");
    keypress[KEY_PRESS_SURFACE_RIGHT] = SDL_LoadBMP("../pikachu/keypress_bmp/right.bmp");
    */

    keypress[KEY_PRESS_SURFACE_DEFAULT] = SDL_LoadBMP("C:/Users/Awat/Desktop/bmp/imgD.bmp");
    keypress[KEY_PRESS_SURFACE_UP] = SDL_LoadBMP("C:/Users/Awat/Desktop/bmp/img3.bmp");
    keypress[KEY_PRESS_SURFACE_DOWN] = SDL_LoadBMP("C:/Users/Awat/Desktop/bmp/img4.bmp");
    keypress[KEY_PRESS_SURFACE_LEFT] = SDL_LoadBMP("C:/Users/Awat/Desktop/bmp/img5.bmp");
    keypress[KEY_PRESS_SURFACE_RIGHT] = SDL_LoadBMP("C:/Users/Awat/Desktop/bmp/img6.bmp");


    while (running) {

        while (SDL_PollEvent(&event)) {
            switch (event.type) {
                //user click x
            case SDL_QUIT:
                running = false;
                break;
                //where all the user inputs are handled
            case SDL_KEYDOWN:
                switch (event.key.keysym.sym) {
                case SDLK_UP:
                    current = keypress[KEY_PRESS_SURFACE_UP];
                    break;
                case SDLK_DOWN:
                    current = keypress[KEY_PRESS_SURFACE_DOWN];
                    break;
                case SDLK_LEFT:
                    current = keypress[KEY_PRESS_SURFACE_LEFT];
                    break;
                case SDLK_RIGHT:
                    current = keypress[KEY_PRESS_SURFACE_RIGHT];
                    break;
                case SDLK_SPACE:
                    current = keypress[KEY_PRESS_SURFACE_DEFAULT];
                    break;
                default:
                    current = keypress[KEY_PRESS_SURFACE_DEFAULT];
                }
            }
        }
        SDL_BlitSurface(current, NULL, surface, NULL);
        SDL_UpdateWindowSurface(window);
    }

    //deallocating surfaces
    for (int i = 0; i < KEY_PRESS_SURFACE_TOTAL; ++i) {
        SDL_FreeSurface(keypress[i]);
        keypress[i] = NULL;
    }

    //destroy everythangggg
    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(renderer);
    SDL_Quit();
    return 0;
}