2

这是从 Ritchie 的 The C Programming Language 复制而来的。我试图进行一些修改,但它总是卡在 for 循环中(第 7 行)

#include <stdio.h>

main()
{

    int fahr;

    for(fahr = 0; fahr <= 300; fahr = fahr + 20)
    {
        printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

    }

}

错误:./farn.c:8:./farn.c:语法错误:循环变量错误

4

4 回答 4

4

我重现了你的问题。在 Ubuntu 上,/bin/sh符号链接到dash.

$ dash ./farn.c
./farn.c: 8: Syntax error: Bad for loop variable

C 程序很少被 Bourne shell 解释器(或其派生程序之一)正确解释。

用 C 编译器编译程序,然后运行可执行文件(或者,如果你能找到一个 C 语言解释器,也可以使用)。在 Ubuntu 上,您可以使用gcc

$ gcc -W -Wall -Werror -pedantic -std=c99 farn.c -o farn
$ ./farn

由于K&R书早于C.99,所以上面的编译命令会产生错误:

cc1: warnings being treated as errors
farn.c:4: warning: return type defaults to 'int'

要解决此问题,您可以简单地main()使用显式int返回类型更新 的声明。在 C.99 中,遇到隐式返回}的末尾的,因此添加就足够了。main()0int

#include <stdio.h>

int main()
{

    int fahr;

    for(fahr = 0; fahr <= 300; fahr = fahr + 20)
    {
        printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

    }

}
于 2013-08-05T20:47:11.887 回答
0

您的代码可以正确编译。这是证明:http ://codepad.org/hryZ2dEm

我还在 main 函数中添加了返回类型和返回指令,以使您的代码符合标准。尝试使用我插入的小改动。

如果您还有问题,请告诉我。

于 2013-08-05T20:09:00.850 回答
0

除了您以非常懒惰的方式定义 main() 并且缺少 return 语句这一事实之外,我认为上面的代码没有任何问题。修复这两个问题后,它使用以下选项编译并运行良好:

gcc temperature.c -g -Wall -Werror -pedantic -o temperature

顺便说一句,main 的入口点应该是以下之一:

int main(void) // You *can* leave void out here, but it's best to be explicit
int main(int argc, char* argv[]) // 2nd arg could also be char** argv

并且你应该总是从 main 返回一个整数值,通常返回 0 表示程序运行成功。

于 2013-08-05T20:10:40.420 回答
0

谢谢大家的建议。我像老板一样使用 GCC 解决了我的问题。

gcc farn.c -o farn

然后

./farn 

效果很好。:-)

于 2013-08-07T03:27:30.283 回答