我只是复制了一些样本程序,这些程序来自Kernighan和Ritchie的 The C Programming Language 。这是它的一个示例,一个声称将输入的C字符串转换为其等效浮点数的程序:
#include <ctype.h>
/* atof: convert string s to a double */
double atof(char s[])
{
double val, power;
int i, sign;
for (i = 0; isspace(s[i]); i++); /* skip white spaces */
sign = (s[i] == '-') ? -1 :1;
if (s[i] == '+' || s[i] == '-')
i++;
for (val = 0.0; isdigit(s[i]); i++)
val = 10.0 * val + (s[i] - '0');
if (s[i] == '.')
i++;
for (power = 1.0; isdigit(s[i]); i++) {
val = 10.0 * val + (s[i] - '0');
power *= 10.0;
}
return sign * val / power;
}
它确实编译但我认为它没有运行,因为没有任何反应。当我尝试“运行”程序时,我收到了这个弹出消息:
我哪里出错了?
此外,我从未看到书中所示的其他示例程序的输出。
答案 0 :(得分:3)
主要功能是应该自给自足的每个C程序的入口点。您可以阅读有关它的内容here on Wikipedia:
main()
功能很特别;通常每个C和C ++程序必须只定义一次。
如果您正在编写一个库(Windows中的.dll
/ Linux中的.so
),那么您将无法提供main
功能,因为您只需向其他人提供功能程序员。该库本身不是一个正在运行的程序。
在我的第二版书中,他们谈论了第6页的main
功能。
提供以下内容,您将看到输出,您还必须包含#include <stdio.h>
:
int main()
{
/* declare variables and initialize some of them */
char doubleStr[] = "3.14";
double doubleVal;
/* invoke your atof function */
doubleVal = atof(doubleStr);
/* print output to console */
printf("The string \"%s\" is converted to: %f", doubleStr, doubleVal);
return 0;
}
答案 1 :(得分:2)
您的代码中没有main()函数。 这就是你收到通知的原因。在C语言中,您的程序必须具有编译和运行的主函数。任何程序的编译都从main开始。 书中的例子通常只有所需函数的代码而不是主函数。他们假设你已经了解了c语言的基础知识。
在代码中添加以下行,它将起作用。
int main(void) {
double a = atof("20");
printf("%f", a);
return 0;
}