【问题标题】:Compiles smoothly, does not run, no output (C)顺利编译,不运行,无输出(C)
【发布时间】:2017-12-22 20:31:10
【问题描述】:

我只是复制了一些示例程序,这些示例程序取自 Kernighan 和 Ritchie 的C 编程语言一书。这是它的示例之一,一个声称将输入的 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;
}

它确实可以编译,但我相信它不会运行,因为什么也没发生。当我尝试“运行”程序时,我收到以下弹出消息:

我哪里做错了?

此外,我从未见过书中显示的其他示例程序的输出。

【问题讨论】:

  • 您的问题不在于 C,而在于名为 dev-c++ 的工具 - 这就是您需要在问题中标记的内容!
  • 您的main 函数在哪里?告诉我们你应该在哪里使用atof 函数并输出它。
  • 另外:那个“程序”缺少 main 功能。它不是一个程序,而是一个编译单元。它有一个函数atof,你应该在某个地方调用它。
  • 哦不......我几个月来都遇到了麻烦......我没有意识到......我认为这是我的错......也许我把 dev-c++ 推得太硬了XD............
  • @AndreKampling 我不能......我只是在复制我从 Kernighan 和 Ritchie 的“C 编程语言”一书中看到的示例程序。我不知道该怎么做......对不起......

标签: c dev-c++


【解决方案1】:

main 函数是每个应该自给自足的 C 程序的入口点。你可以阅读一些关于它的东西here on Wikipedia:

main() 函数很特殊;通常每个 C 和 C++ 程序都必须只定义一次。

如果您正在编写库(Windows 中的.dll/Linux 中的.so),您不会提供main 函数,因为您只是向其他程序员提供函数。该库本身并不是一个正在运行的程序。

在我的第二版书中,他们在第 6 页讨论了main 函数。

提供以下内容,您将看到还必须包含 #include &lt;stdio.h&gt; 的输出:

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

【讨论】:

  • 嗨@BAHUG_OTEN,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
【解决方案2】:

您的代码中没有 main() 函数。 这就是您收到通知的原因。在 C 语言中,您的程序必须有一个 main 函数才能编译和运行。任何程序的编译都是从 main 开始的。 另外书中的例子一般只有所需函数的代码,没有main函数的代码,假设你了解c语言的基础知识。

在您的代码中添加以下行,它会起作用。

int main(void) {
    double a = atof("20");
    printf("%f", a);

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多