Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ebywku
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 58
#1

Ошибка с "stdafx.h" - C++

01.02.2014, 02:34. Просмотров 965. Ответов 8
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <stdafx.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
int main()
{
int pole[7][7],q[7][7],a[7][7],u=0,p=0,w=0,e,sh=0,s=5,h,i,l=0,v,n=0,x,o,j,k,b,c,z=5;
srand(time_t(NULL));
for(i=1;i<6;i++)
for(j=1;j<6;j++)
q[i][j]=0;
for(k=0;z!=0;k++)
{
j=rand()%17-8;
i=rand()%17-8;
if(i>=1 && i<=5 && j>=1 && j<=5)
{
if(q[i][j]!=1)
{
q[i][j]=1;
z=z-1;
}
}
}
for(i=0;i<7;i++)
for(j=0;j<7;j++)
{
pole[i][j]=q[i][j];
}
printf ("\n");
 
for(i=1;i<6;i++)
{
for(j=1;j<6;j++)
printf ("%2i",a[i][j]);
 
printf ("\n");
}
for(k=0;k<999;k++)
{
printf ("KyDa BbICTPELITb?");
scanf_s ("%i",&i);
scanf_s ("%i",&j);
if(q[i][j]>=0 && i>=1 && i<=5 && j>=1 && j<=5)
{
p=i-1;
u=j-1;
if(q[i][j]==1)
{
printf ("BbI npourpaLu!\n");
for(i=1;i<6;i++)
{
for(j=1;j<6;j++)
printf ("%2i",pole[i][j]);
printf ("\n");
}
exit(0);
}
else
{
printf ("MuH HET!\n");
sh=sh+1;
if(sh==20)
printf ("BbI auea?aLu!");
exit(0);
}
q[i][j]=-1;
w=0;
for(i=p;i<p+3;i++)
for(j=u;j<u+3;j++)
//4*5
//678
if(q[i][j]==1)
w=w+1;
}
 
if(w==0)
w=-1;
a[p+1][u+1]=w;
for(i=1;i<6;i++)
{
for(j=1;j<6;j++)
printf ("%2i",a[i][j]);
printf ("\n");
}
printf ("\n"); 
}
printf ("OIIIu6KA!\n");
getch();
}



Вот то что у меня есть,ошибка с библиотекой stdafx.h,да и после моих манипуляций оно запустилось,но не работает так как надо.может кто помочь решить проблему,это сапер в консольном режиме.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
01.02.2014, 02:41     Ошибка с "stdafx.h" #2
ebywku, создай пустой проект и удали 1-ю строчку " #include <stdafx.h> ", навязанную студией, либо < > поменяй на " ", т.е.: #include "stdafx.h" - это пользовательский заголовочник, если мне не изменяет память (давно такого не видел (: ).
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
01.02.2014, 03:10     Ошибка с "stdafx.h" #3
если грубо, то мы видем
C++
1
2
3
4
5
6
7
8
9
10
#include <stdafx.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <string.h>
#include <conio.h>
срань господня...
дальше:
C++
1
printf ("\n");
зачем было
C++
1
using namespace std;
да что это вообще?
что за scanf_s ("%i",&i); ?
что за getch(); ?
да и весь этот бешенный набор инклудов, тут из С++ от силы 10% строчек, остальное бред собачи... ой, сишный

ну вот в чём по Вашему разница между time.h и ctime? а какое отношение к C++ имеет conio.h? да и про остальные *.h я молчу, их не должно быть вообще
ebywku
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 58
01.02.2014, 03:20  [ТС]     Ошибка с "stdafx.h" #4
простите,но на больше меня не хватило,потому к вам и обратился.

Добавлено через 1 минуту
я с удовольствием выслушаю всю вашу критику постараюсь исправить все
Kuzia domovenok
1888 / 1743 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
01.02.2014, 03:58     Ошибка с "stdafx.h" #5
abit, ты поворчать насчёт си зашёл? Все функции си поддерживаются и в плюсах и их стоит знать.
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
01.02.2014, 16:53     Ошибка с "stdafx.h" #6
abit, сам с такими мыслями код просматриваю, но все же - раздел соответствующий, поэтому так грубо критиковать не стоит, наверное
ebywku, я уже написал, что должно помочь. Это сапёр? С С++ неделю-две знакомы?
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
01.02.2014, 19:34     Ошибка с "stdafx.h" #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ebywku, набросал свой вариант игры. Только он не завершенный:
- Нет проверки на наличие пустых соседних клеток при попадании в "0" клетку (т.е. клетку, рядом с которой нет мин).
- Нет проверки на победу в игре (принимается только поражение ).

Пример игры в действии - во вложенном файле.

Нет, мне не сложно её дописать - но тогда вам не интересно будет разбирать её исходный код. А поставив задачу - покопаетесь в коде, лучше освоитесь.

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <iostream> // подключаем для ввода-вывода инфорации
#include <clocale> // для поддержки русского языка
#include <cstdlib> // для генерации случайных чисел
#include <vector> // для работы с матрицами (игровое поле)
#include <ctime> // понадобится для генерации "семени" в srand()
#include <algorithm> // для работы с игровым полем
#include <cmath> // ну, понадобился мне модуль числа :)
#include <iomanip> // для форматированного ввода-вывода
 
typedef std::vector<std::vector<std::pair<int, bool>>> field; // тип игрового поля
struct POINT { int x, y; }; // точки попадания
 
// проверяем правильность введенных данных
bool check_pos(POINT pos, int size);
// Генерация игрового поля. Принимает размер и количество мин
field generate_game(int size, int count);
// Ожидание при завершении программы
void end_game();
// Вывод игрового поля
void print(field matrix, bool status = false);
// Основной цикл игры
void begin_game(field matrix);
 
// входная функция
int main()
{
    field matrix = generate_game(7, 10); // генерируем игровое поле (7х7, 10 мин)
    begin_game(matrix); // запускаем игровой цикл
    end_game(); // пауза перед завершением
    return 0;
}
 
// проверяем правильность введенных данных
bool check_pos(POINT pos, int size)
{
    if(pos.x>=0 && pos.x<size)
        if(pos.y>=0 && pos.y < size)
            return true;
    return false;
}
 
// Генерация игрового поля. Принимает размер и количество мин
// Возвращает, соответственно, игровое поле в виде двумерного массива (контейнера)
field generate_game(int size, int count)
{
    field matrix(size, std::vector<std::pair<int, bool>>(size, std::make_pair(0, false))); // игровое поле
    std::vector<std::pair<int, int>> mines; // координаты мин на игровом поле
    std::srand(static_cast<unsigned int>(std::time(NULL))); // задаём семя для генератора случайных чисел
 
    for(int i=0; i<count; ++i) { // произвольно располагаем мины
 
        int x = rand()%size;
        int y = rand()%size;
 
        if(matrix[x][y].first == 0) { // свободна ли клетка?
            matrix[x][y].first = -1; // -1 на игровом поле - мина
            mines.push_back(std::make_pair(x, y)); // добавляем координаты мины
        }
        else
            --i; // если клетка занята - повторяем итерацию цикла
    }
    
    // располагаем цифры на игровом поле, определяющие позиции мин
    for(int i=0; i<size; ++i)
        for(int j=0; j<size; ++j) {
            if(matrix[i][j].first ==-1) continue;
            int t = 0;
            for(auto p : mines) {
                if(std::abs(p.first-i)<2 && std::abs(p.second-j)<2)
                    ++t;
            }
            matrix[i][j].first = t;
        }
 
    return matrix; // возвращаем игровое поле
}
 
// Ожидание при завершении программы
void end_game()
{
    std::cout << std::endl;
    std::system("pause");
}
 
// Вывод игрового поля
void print(field matrix, bool status)
{
    using std::cout;
    cout << std::endl;
 
    std::for_each(matrix.begin(), matrix.end(), [=](std::vector<std::pair<int, bool>>& row)
    {
        std::for_each(row.begin(), row.end(), [=](std::pair<int, bool> value)
        {
            if(value.second || status) {
                if(value.first == -1)
                    cout << std::setw(3) << "*";
                else
                    cout << std::setw(3) << value.first;
            }
            else
                cout << std::setw(3) << "#";
        });
        cout << std::endl;
    });
}
 
// Основной цикл игры
void begin_game(field matrix)
{
    using std::cin; using std::cout; // Здесь их часто используем
 
    std::setlocale(LC_ALL, "rus");
    POINT pos;
    bool status = false;
 
    while(true)
    {
        print(matrix);
        cout << "--------" << std::endl;
        cout << "Координаты точки попадания (Пример: 2 3 ): ";
        cin >> pos.x >> pos.y;
        --pos.x; --pos.y;
        
        if(!check_pos(pos, matrix.size())) {
            cout << "Введены некорректные данные. Повторите ввод.";
            continue;
        }
 
        if(matrix[pos.x][pos.y].second) {
            cout << "Вы уже стреляли сюда. Повторите ввод.";
            continue;
        }
 
        if(matrix[pos.x][pos.y].first == -1) {
            cout << "Вы попали в мину!";
            print(matrix, true);
            break;
        }
 
        else matrix[pos.x][pos.y].second = true;
    }
 
    if(!status)
        cout << "Вы проиграли";
    else
        cout << "Вы выиграли";
 
}


У вас проблемы с подключением заголовочных файлов - не пожалел времени на комментирование, зачем подключаем тот или иной файл.

Логика программы:
- создаётся двумерный массив (игровое поле), каждая ячейка которого содержит 2 переменные: int и bool.
Первое значение int - содержит количество мин рядом с этой ячейкой (либо -1, если сама является миной).
Второе значение bool - содержит значение попадания по этой клетке (false - еще не попадали, true - попадали).

- запускается бесконечный цикл, который принимает от игрока координаты ячеек, фильтрует их и выдает результаты.


В общем, вроде всё. Будут вопросы - пишите )
P.s: код в истинном стиле C++ - не пугайтесь. Вроде бы
P.s.s: кстати, была мысль загнать весь функционал в свою область имен, но, передумал, решив, что и так код может показаться сложным для понимания.
Миниатюры
Ошибка с "stdafx.h"  
ebywku
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 58
02.02.2014, 00:17  [ТС]     Ошибка с "stdafx.h" #8
да месяц почти,до этого просто на С пытался,но так к успеху не дошел.Спасибо за код и за критику)

Добавлено через 4 часа 1 минуту
Простите,а в какой среде вы работаете?
Ибо мои билдеры выдают ошибки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2014, 09:15     Ошибка с "stdafx.h"
Еще ссылки по теме:

C++ Не открывается библиотека 'stdafx.h' и "char" не работает с параметром "char*"
C++ Не находит "stdafx.h", в чем ошибка?
Зачем нужен "stdafx.h" заголовок в Visual Studio C++
Ошибка "stdafx.h: No such file or directory" C++
Исправить ошибку "stdafx.h: No such file or directory" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
02.02.2014, 09:15     Ошибка с "stdafx.h" #9
ebywku, код скомпилируется на любом компиляторе, поддерживающем стандарт С++11.
Например, этот код писал в 12-й студии. Если используете компилятор mingw или gcc, проверьте, используется ли флаг поддержки стандарта C++11.

Добавлено через 3 минуты
Аа.. у вас же студия. Создайте пустой проект и с ним уже работайте.
Либо в начале всех инклудов добавьте:
C++
1
#include "stdafx.h"
Yandex
Объявления
02.02.2014, 09:15     Ошибка с "stdafx.h"
Ответ Создать тему
Опции темы

Текущее время: 22:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru