Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

При запуске этого кода, с компом случается п*здЕц

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
 #include <stdio.h> 
#include <conio.h> 
#include <locale.h> 
 
#define clean system("cls"); 
 
int main() 
{ 
    setlocale(LC_ALL, "Russian"); 
    char map[10][11]; 
    int i; 
    int px=8,py=8; 
    int pox,poy; 
    char key; 
    char menu; 
    printf("Меню:\n1. Играть\n2. Выйти\n"); 
    printf("Выбор: "); 
    menu = getch(); 
    if (menu == '1') { 
        clean; 
        do 
        { 
            sprintf(map[0], "##########"); 
            sprintf(map[1], "#         "); 
            sprintf(map[2], "#   ###  #"); 
            sprintf(map[3], "#   #    #"); 
            sprintf(map[4], "#  ###   #"); 
            sprintf(map[5], "#   #    #"); 
            sprintf(map[6], "#  ####  #"); 
            sprintf(map[7], "#     ####"); 
            sprintf(map[8], "#        #"); 
            sprintf(map[9], "##########"); 
 
            map[py][px] = "0"; 
 
            for (i=0;i<10;i++) 
            { 
                printf("%s\n",map[i]); 
            } 
 
            printf("x = %d, y = %d",px,py); 
 
            pox = px; 
            poy = py; 
 
            key = getch(); 
            if (key == 'w') py--; 
            if (key == 's') py++; 
            if (key == 'a') px--; 
            if (key == 'd') px++; 
 
            //ограничение стен 
            if (map[py][px] == '#') 
            { 
                px = pox; 
                py = poy; 
            } 
 
            clean; 
        } 
        while (key != 'e'); 
    } 
    else return 0; 
    return 0; 
} 
 

В общем я делал текстовую игру на СИ.
Суть игры в том, что есть текстовый лабиринт и его нужно пройти (я не доделал его, это ещё альфа). Игрок отмечен в лабиринте "0"
И при изменении кода, у меня вместо 0 движется другие символы. Сейчас если вы запустите код, там вместо "0" будет ":"

Это первое.

А второе (это пипец просто!), когда я оставил игру запущенным (я сам не заметил этого) и спокойно делал другие дела на компе, на меня посмотрела грустная рожа (синий экран крч).
С компом всё в порядке, я через него и пишу. Я думаю это из-за моей программы, так как Си может хорошо взаимодействовать с железом. И я думаю что где то я в коде зарукожопил и где то неправильно распределил ОЗУ. Я вообще новичок в Си и много чего я мог допустить. Мне один пацан вообще говорил, что stdlib.h иногда бывает не нужным (этот пацан в ответах мейл ру как раз таки был).

Крч, помогите питонисту)))

По дате
По рейтингу
Аватар пользователя
Новичок

map - это массив символов
map[py][px] = "0"; // а здесь вы пытаетесь засунуть в него целую строку.
Так как строка "0" - это по сути адрес (32 или 64-бита), то вместо символа 0 туда попадает рандомный кусок этого адреса, который может трактоваться как символ : или любой другой. Символ 0 записыывается так - '0'

Кстати, на современном компиляторе типа VS2022 у вас это бы просто не удалось скомпилировать, а текст ошибок намекнул бы на то, что именно делаете не так

map[py][px] = '0'; // например, на то, что здесь будет выход за границы массива

>синий экран ... Я думаю это из-за моей программы ...взаимодействовать с железом
Прикладные программы в Windows изолированы от какой-либо работы с железом и синий экран вызвать не могут (разве что через вызов метода NtRaiseHardError с правами админа) , синий экран мог возникнуть только если у вас Win98 или неисправное железо/кривые драйвера.

>stdlib.h иногда бывает не нужным
Если не используете - значит не нужный. Если вызываете system() - значит, нужен и придётся инклудить.