Ошибка во время компиляции исходного кода C - PullRequest
4 голосов
/ 29 июня 2011

Мне нужна помощь, чтобы определить ошибку в моей программе, которую я написал на C. Пожалуйста, имейте в виду, что я все еще изучаю C. Я пытаюсь реализовать то, чему научился до сих пор. Моя IDE - MS visual studio 2010.

Вот программа, описание программы написано в виде комментария:

/*The distance between two cities (in km) is input through the keyboard. 
Write a program to convert and print this distance in meters, feet, inches and centimeters*/

#include<stdio.h>
#include<conio.h>

//I have used #include<stdio.h> and #include<conio.h> above


int main()
{
float km, m, cm, ft, inch ;

clrscr();
printf("\nEnter the distance in Kilometers:");
scanf("%f", &km );

// conversions

m=km*1000;
cm=m*100;
inch=cm/2.54;
ft=inch/12;

// displaying the results

printf("\nDistance in meters =%f", m);
printf("\nDistance in centimeters =%f", cm);
printf("\nDistance in feet =%f", ft);
printf("\nDistance in inches = %f", inch);

printf("\n\n\n\n\n\n\nPress any key to exit the program.");
getchar();
return 0;
}

Errors:
1>e:\my documents\visual studio 2010\projects\distance.cpp(32): error C2857: '#include' statement specified with the /YcStdAfx.h command-line option was not found in the source file

Ответы [ 3 ]

6 голосов
/ 29 июня 2011

ошибка C2857: оператор '#include', указанный с параметром командной строки /YcStdAfx.h, не найден в источнике

Это означает, что компилятор (VisualStudio 2010) принудительно включает StdAfx.hно в источнике вы его не включаете.

Попробуйте добавить:

#include <StdAfx.h>

вверху исходного файла.

3 голосов
/ 30 декабря 2012

к предупреждению C4996
против 2010, особенно против 2012.
Вы должны поместить следующий код вверху файла

#define _CRT_SECURE_NO_WARNINGS  

И установите для параметра предварительно скомпилированного заголовка значение «не используется» на странице свойств проекта.

3 голосов
/ 07 сентября 2011

SanSS уже объяснил сообщение об ошибке. Позвольте мне кратко объяснить предупреждения. Первое предупреждение о scanf может быть проигнорировано на этом этапе. Проблема с scanf заключается в том, что это небезопасно, если вы пытаетесь прочитать строку в заранее выделенную C-строку (например, массив char или указатель char). Вы читаете с плавающей точкой, которая всегда имеет фиксированный размер (обычно четыре байта). Так что здесь переполнения быть не может.

Второе предупреждение касается выражения inch=cm/2.54. Литерал 2.54 рассматривается как значение двойной точности. Так что cm/2.54 также будет двойным значением - результат такого вычислительного выражения всегда будет выгружен. Хотя cm имеет тип float (одинарная точность), результатом будет double. Однако inch имеет тип float, поэтому присваивание = будет неявно понижать результат с double до float. Поскольку переменная float имеет меньшую точность, результат станет менее точным. Чтобы избежать этого предупреждения, измените числовой литерал, чтобы выражение выглядело так: inch = cm / 2.54f. Это говорит компилятору, что 2.54 следует рассматривать как литерал float с одинарной точностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...