我希望能得到一些我认为非常简单的C编程任务的输入。我已经坚持了几天,我认为问题是基本参数传递的问题。
conv_to_cent.c
程序中包含main()
。convert_to_cent
并传入参数double fahr
。库函数应该采用华氏温度值并将其转换为摄氏温度。cent
的变量中,然后尝试使用return cent
返回。以下是我的来源及其所在的3个文件:
#include <stdio.h>
int main()
{
double fahr;
fahr = 83.0;
printf ("%3.1f degrees Fahrenheit is %3.1f degrees centigrade.\n",
fahr, convert_to_cent(fahr));
return 0;
}
double convert_to_cent (double fahr);
#include <stdio.h>
#include <cent_convert_header.h>
double convert_to_cent(double fahr)
{
double cent;
printf ("output from cent_convert: fahr passed in: %3.1f \n", fahr);
/* perform the calculation to centigrade */
cent = (5/(double)9) * (fahr-32);
printf ("output from cent_convert: calculated value for cent is: %3.1f \n", cent);
/* return the calculated value */
return cent;
}
output from cent_convert: fahr passed in: 83.0
output from cent_convert: calculated value for cent is: 28.3
output from main: 83.0 degrees Fahrenheit is 83.0 degrees centigrade.
答案 0 :(得分:2)
正如@WeatherVane在评论中建议的那样, conv_to_cent.c 文件缺少 cent_convert_header.h 的包含。这会导致编译器假定convert_to_cent
返回int
,而不是printf
,因此事情就会中断。
详细说明可以发生的事情(虽然这是纯粹的推测,因为你有一个未定义的行为):我最好的猜测为什么你得到的结果是你做的从浮点堆栈中读取fahr
的第二个参数。浮点堆栈似乎多次包含printf
,因此对于第一个和第二个convert_to_cent
参数,它的值都被检索。同时,编译器将一些幻像返回值从printf
推送到int
作为printf
,但由于对var q = from t1 in db.Table1
from t2 in db.Table2.Where(x => x.ColA == t1.ColA && x.ColB == t1.ColB)
select t1;
的调用不包含整数,因此永远不会读取此值-specifier。
答案 1 :(得分:1)
除了转换例程中缺少的标题#include
之外,您还希望做的一件事就是用简单的{{1} 包装您的头文件}(#ifndef
)调用用于标识头文件的唯一标签。目的是防止在编译时多次包含头文件。 (如果查看任何标准头文件,您将看到它完成)
要防止多重包含,您只需检查该标头是否存在唯一的现有定义,如果不存在,则创建#if not defined
并包含标题内容。例如,使用您的#define
文件:
<强> cent_convert.h 强>
cent_convert.h
注意:保留所有资金包括系统的定义,只是让你的小写确保没有冲突。另外,给定义值#ifndef _cent_convert_h_
#define _cent_convert_h_ 1
#include <stdio.h>
double convert_to_cent (double fahr);
#endif /* _cent_convert_h_ */
(或某个正数)。虽然不是100%要求,但他们在技术上应该测试1
。
剩余的文件流不受影响:
<强> cent_convert.c 强>
TRUE
<强> f2c.c 强>
#include "cent_convert.h"
double convert_to_cent(double fahr)
{
double cent;
printf ("output from cent_convert: fahr passed in: %3.1f \n", fahr);
/* perform the calculation to centigrade */
cent = (5/(double)9) * (fahr-32);
printf ("output from cent_convert: calculated value for cent is: %3.1f \n",
cent);
/* return the calculated value */
return cent;
}