Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/725: Рейтинг темы: голосов - 725, средняя оценка - 4.87
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
1

Не удается открыть источник файл "stdafx.h" и не только

21.09.2014, 20:20. Показов 136187. Ответов 41
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем ситуация: написал код в универе на visual studio 2008, пришел домой, скопировал этот же код в 2013 версию и получил следующие ошибки: 1)Не удается открыть источник файл "stdafx.h" 2)идентификатор "printf" не определен 3)идентификатор "scanf" не определен. В универе все работает. код:
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
#include "stdafx.h"
#include <math.h>
#include <conio.h>
#include "clocale"
int kvadur(float a, float b, float c,
           float* x1, float* x2)
 {
  if(a==0.0) return -1;
float d= b*b-4*a*c;
if(d<0.0) return 0;
if(x1==NULL||x2==NULL) return -1;
*x1=(-b+sqrt(d))/(2*a);
*x2=(-b-sqrt(d))/(2*a);
 
if(*x1==*x2) return 1;
return 2;
}
 
int main()
{   
    setlocale(LC_ALL, "Russian");
    printf("\nРешение квадратного уравнения\n");
    printf("\nВедите в одной строке коэффициенты и нажмите <Enter>\n");
    printf("->");
 
    float a,b,c;
    float x1,x2;
 
    scanf("%f%f%f",&a,&b,&c);
 
    int n = kvadur(a,b,c,&x1,&x2);
    switch(n)
    {
    case -1:
        printf("ошибка исходных данных");
        break;
    case 0:
        printf("Уравнение не имеет решения");
        break;
    case 1:
        printf("Корни одинаковые: x=%3.2f",x1);
        break;
    case 2:
        printf("x1=%3.2f x2=%3.2f",x1,x2);
            break;
    }
    printf("\nДля заверешения нажмите любую клавишу...");
    getch();
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2014, 20:20
Ответы с готовыми решениями:

Не удается открыть источник файл "stdafx.h
Выдает ошибку &quot;не удается открыть источник файл &quot;stdafx.h&quot;&quot; Подскажите пож-та, в чем проблема? //...

Ошибка "E1696 не удается открыть источник файл stdafx.h"
написал вот такую программку для записи в файл #include &lt;iostream&gt; #include &lt;string&gt; ...

Ошибка E1696 не удается открыть источник файл "stdafx.h"
Ошибка (активно) E1696 не удается открыть источник файл &quot;stdafx.h&quot; ...

Не удается открыть источник файл "stdafx.h"
Вообщем ситуация: написал код для Лабораторной работы на visual studio 2019 в ошибке пишет Не...

41
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.09.2014, 20:25 2
Цитата Сообщение от serega006 Посмотреть сообщение
#include "stdafx.h"
#include <math.h>
#include <conio.h>
#include "clocale"
Замените на
C++
1
2
3
4
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
1
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
21.09.2014, 20:28  [ТС] 3
Выдает новую ошибку: error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.09.2014, 20:43 4
scanf_s - это микрософтовская приблуда.
Поскольку Вы используете C++, то советую все scanf заменить на потоковые классы (cin,cout)
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
int main()
{   
    setlocale(LC_ALL, "Russian");
    cout<<("\nРешение квадратного уравнения\n";
    cout<<("\nВедите в одной строке коэффициенты и нажмите <Enter>\n->";
    float a,b,c;
    float x1,x2;
 
    //scanf("%f%f%f",&a,&b,&c);
    cin>>a>>b>>c;
 
    int n = kvadur(a,b,c,&x1,&x2);
    switch(n)
    {
    case -1:
        cout<<"ошибка исходных данных";
        break;
    case 0:
        cout<<"Уравнение не имеет решения";
        break;
    case 1:
        cout<<"Корни одинаковые: x=%3.2f"<<x1<<endl;
        break;
    case 2:
        cout<<"x1="<<x1<<' '<<"x2="<<x2<<endl;
        break;
    }
    system("pause");
     return 0;
}
1
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
21.09.2014, 20:56  [ТС] 5
Дело в том что в универе мы вроде как пишем на си, но в визуале так же выбираем проект с++, моя цель это возможность компилировать тот код который я делаю в универе дома, без установки визуала 2008 года. Может можно как то подключить stdafx.h? как я понял printf и scanf в нем и лежат.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.09.2014, 21:03 6
Цитата Сообщение от serega006 Посмотреть сообщение
Может можно как то подключить stdafx.h? как я понял printf и scanf в нем и лежат.
printf и scanf Лежат в <stdio.h>
А stdafx.h - это файл предварительно скомпилированных заголовков.
Если создается пустой проект, то такой файл включать не надо.
1
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
21.09.2014, 21:21  [ТС] 7
То есть из вариантов только качать 2008 версию и более никак?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.09.2014, 21:32 8
Нелогичный вывод.
Поменяйте scanf на scanf_s и ВСЕ!
1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
21.09.2014, 21:51 9
Лучший ответ Сообщение было отмечено Убежденный как решение

Решение

Цитата Сообщение от serega006 Посмотреть сообщение
как я понял printf и scanf в нем и лежат.
printf и scanf это небезопасные функции
соответственно микрософт ввел свои( scanf_s)
до 2010 scanf вызывал предупреждение, сейчас ошибку
где то это отключается,но у меня фирменная 2008,менять не планирую, посему не могу подсказать где, поищи по форуму
или воспользуйся советом zss, тем более что scanf_s в 2008 есть
1
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
21.09.2014, 22:11  [ТС] 10
Увы scanf_s не спасает, на этот раз ошибка error C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details. И что то мне подсказывает что в дальнейшем при попытке запустить код с универа дома будут возникать проблемы требующие изменения кода, а чем дальше в лес тем больше кода придется править, поэтому более логичного решения кроме как поставить версию 2008, которая каким то неизвестным мне способом компилирует то что не компилирует 2013.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.09.2014, 22:14 11
То же самое замените getch на _getch

Добавлено через 1 минуту
Не будет - в 2008 студии - это выводилось как предупреждения.
1
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
21.09.2014, 23:07  [ТС] 12
А проблемки все таки возникают не только со scanf и и getch. Вот например второй код
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include "clocale"
#define FNAME "D:\\numbers.txt"
#define N 5
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char fname[20]=FNAME;
    FILE* out;
    int n;
 
    printf("Создание файла\n");
    printf("Введённые числа будут записаны в файл: %s\n\n", fname);
    printf("После ввода каждого числа нажимайте <Enter>\n");
 
    out=fopen(fname, "wt");
    if(out==NULL)
    {
        printf("Ошибка открытия файла для записи\n");
        getch();
        return 1;
    }
 
    for (int i=0; i<N; i++)
    {
        printf("->");
        scanf("%i",&n);
        fprintf(out, "%i ",n);
    }
 
    fclose(out);
    printf("\nВведённые числа записаны в файл %s\n", fname);
    printf("Для завершения нажмите <Enter>");
    getch();
 
    return 0;
}
Итак первая и единственная ошибка намекает сменить fopen на fopen_s, заменяем и получаем вместо нее 4 ошибки: 1) error C2660: fopen_s: функция не принимает 2 аргументов 2) значение типа "errno_t" нельзя присвоить сущности типа "FILE *" 3)аргумент типа "char *" несовместим с параметром типа "FILE **" 4)слишком мало аргументов в вызове функции.
И собственно из этого я и сделал вывод что в дальнейшем придется много чего править что бы запустить компиляцию.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
21.09.2014, 23:15 13
Цитата Сообщение от serega006 Посмотреть сообщение
rror C2660: fopen_s: функция не принимает 2 аргументов
правильно
это безопасная функция, ей нужно еще количество символов дать

приведу пример чтоб было понятно
C++
1
2
char buf[2];
scanf("%s",buf);
теперь введи строку символов этак на 100( можно и меньше, главное чтобы больше чем один символ)
и все программа рухнет, переполнение стека
в scanf_s вводишь количество символов(2) и можешь хоть завводится, больше 2х символов не запишет

вывод: или пользуйся микросовтовскими примочками, или используй другой компилятор, например Qt он бесплатный
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.09.2014, 23:55 14
Цитата Сообщение от serega006 Посмотреть сообщение
Выдает новую ошибку: error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Как отключить в свойсвах проекта:
https://www.cyberforum.ru/post5488517.html
Или, выше всех инклудов, прописать: #define _CRT_SECURE_NO_WARNINGS (для getch() не работает, нужно заменить на _getch()).
Или ниже всех инклудов прописать: #pragma warning(disable : 4996)
2
Рожденная для битвы
293 / 71 / 14
Регистрация: 08.11.2009
Сообщений: 1,260
06.10.2014, 09:08 15
alsav22, #define _CRT_SECURE_NO_WARNINGS не помогло почему-то, только #pragma warning(disable : 4996)

Что означает тип errno_t?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.10.2014, 09:12 16
Цитата Сообщение от marina2 Посмотреть сообщение
#define _CRT_SECURE_NO_WARNINGS не помогло почему-то
В каком коде? Выше всех инклудов писали? Список ошибок.
0
Рожденная для битвы
293 / 71 / 14
Регистрация: 08.11.2009
Сообщений: 1,260
06.10.2014, 09:18 17
alsav22, необходимо же после всех ошибок. Беда в том, что от него никакого толка. Все равно вылазит ошибка
C++
1
Error   1   error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.  c:\users\marina\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.10.2014, 09:20 18
Цитата Сообщение от marina2 Посмотреть сообщение
необходимо же после всех ошибок.
Что после всех ошибок? Код покажите.
0
Рожденная для битвы
293 / 71 / 14
Регистрация: 08.11.2009
Сообщений: 1,260
06.10.2014, 09:24 19
alsav22, необходимо же после всех инклудов. Правка

Добавлено через 1 минуту
Подскажите лучше про Что означает тип errno_t?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.10.2014, 09:29 20
Цитата Сообщение от marina2 Посмотреть сообщение
необходимо же после всех инклудов.
Кому необходимо? Чтобы работало:
Цитата Сообщение от alsav22 Посмотреть сообщение
Или, выше всех инклудов, прописать: #define _CRT_SECURE_NO_WARNINGS (для getch() не работает, нужно заменить на _getch()).
Добавлено через 46 секунд
Цитата Сообщение от marina2 Посмотреть сообщение
Подскажите лучше
Лучше делайте правильно, и не пишите, что не работает, если делаете по-своему.
0
06.10.2014, 09:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2014, 09:29
Помогаю со студенческими работами здесь

не удается открыть источник файл "stdafx.h"
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; // функции ввода-вывода #include &lt;locale.h&gt; // функции...

Ошибка: "Не удается открыть источник stdafx.h"
Вот код #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt;//для русского языка в...

Не удается открыть файл включение: StdAfx.h: No such file or directory
заголовочный файл #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace...

Не удается открыть файл включение: stdafx.h: No such file or directory
Здравствуйте, помогите пожайлуста с програмой для курсовой. Основная проблема - Не удается открыть...

Не удается открыть файл include: stdafx.h: No such file or directory
В общем, нужно скомпилировать программу: #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

Fatal error C1083: Не удается открыть файл включение: stdafx.h: No such file or directory
Visual Studio c++ При запуске выдается ошибка fatal error C1083: Не удается открыть файл...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru