顺利编译,不运行,无输出(C)

时间:2017-07-18 06:16:55

标签: c dev-c++

我只是复制了一些样本程序,这些程序来自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;
}

它确实编译但我认为它没有运行,因为没有任何反应。当我尝试“运行”程序时,我收到了这个弹出消息:

Source file not compiled

我哪里出错了?

此外,我从未看到书中所示的其他示例程序的输出。

2 个答案:

答案 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;
}