c - MIT OpenCourseWARE C/C++ 作业 1 无输出问题

标签 c

我对 C/C++ 知之甚少,所以我决定在线学习 MIT 的 OpenCourseWare 类(class)。大约 8 年前,我上了两年的 Java 类(class),最近有大约 4 年的 MATLAB 经验。

在努力完成编译器设置之后,我设法在 Eclipse IDE 中完成了第一个实验。我可以在 Eclipse 或 cmd 中运行 Hello World 代码,它们将输出我在代码中拥有的任何文本。我正在做“作业 1”,我已对 .C 文件的答案进行了修改。

这是作业的链接:http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-s096-introduction-to-c-and-c-january-iap-2013/lectures-and-assignments/compilation-pipeline/

它似乎编译并生成 .exe,但是当我转到命令提示符输入两个输入(int argc,char *argv[])时,它运行但不生成任何输出。我正在使用网站上建议的命令:./fibeverse 6“那真是一次旅行!”。 Eclipse 中只有一个警告,它位于 fibverse.c 中,并且显示“未使用的变量 'i'”,尽管下面的两个 'if' 语句中使用了该变量。

我在 makefile 中使用这一行: gcc -Wall -std=c99 fibeverse.cverse.c fibonacci.c -o fibeverse

有谁知道我是否做错了什么?我不确定错误是否是我调用 .exe 文件的方式所致,或者 .exe 是否生成不正确。

如果需要,我可以发布我的确切文本,除非有必要,否则我不想让帖子变得困惑。我已经多次检查了解决方案 key ,以确保我没有输入任何错误。

感谢您的宝贵时间,

伊恩

编辑:这是主要内容,它在评论中发布得不太好:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "fibonacci.h"
#include "reverse.h"

int main(int argc, char *argv[]) {
int i = 1;

#ifdef fibonacci
if (i < argc) {
    print_fib(atoi(argv[i]));
    i++;
}
#endif

#ifdef reverse
if (i < argc) {
    reverse(argv[i], strlen(argv[i]));
    i++;
}
#endif
printf("Press Enter to Exit\n");
getchar();

return 0;
}

添加 printf 只是为了确保它不会闪烁输出,没有它它的响应没有不同。另外,#ifdef 只是更改为小写,但这也没有改变任何内容。

感谢您的快速回复!

最佳答案

作业 1 有两个问题。在问题 1 中,程序应使用 gcc -Wall -std=c99 fibeverse.c reverse.c fibonacci.c -o fibeverse 进行编译。 ,并且应该修复阻止程序编译的错误。

有两个错误:

  • 每个 fibonacci.creverse.c不包含其相应的 header ,fibonacci.creverse.c 。虽然源文件不需要包含其相应的 header ,但这通常是一个很好的做法,原因有两个。第一, header 声明源文件定义的例程,并且包含 header 允许编译器在同一编译中查看声明和定义,这反过来又允许编译器报告两者之间的不一致。第二,源文件经常使用一些自己的例程作为子例程,并且包含 header 为这些例程提供了声明,这是在定义例程之前使用的例程所需要的。在 fibonacci.c , fib在定义之前使用,因此在使用之前应该有一个声明。包括fibonacci.h提供此声明。
  • reverse.c定义了一个名为 backwards 的例程但旨在定义一个名为 reverse 的例程,所以应该更改名称。

修复这些错误后,程序将使用上面显示的命令进行编译,不会出现错误。

该命令用于作业的问题 1,不应用于问题 2。

在问题2中,你修改程序,使得调用print_fib的两段代码或reverse可以单独启用或禁用。正如您在提供的解决方案中所看到的,这可以通过插入诸如 #ifdef FIBONACCI 之类的语句来完成。 .

完成此修改后,您可以通过包含开关 -DFIBONACCI 来启用每段代码。或-DREVERSE在编译器命令行中。 一旦进行此修改,原始命令行将无法正常工作。不要使用它。

问题2的说明显示了程序修改后要与命令一起使用的三个命令。

此命令构建程序,因此它只计算斐波那契数:

gcc -Wall -std=c99 -DFIBONACCI fibeverse.c reverse.c fibonacci.c -o fibonacci

此命令构建程序,因此它仅反转字符串:

gcc -Wall -std=c99 -DREVERSE fibeverse.c reverse.c fibonacci.c -o reverse

此命令构建程序,因此它可以执行以下两个操作:

gcc -Wall -std=c99 -DFIBONACCI -DREVERSE fibeverse.c reverse.c fibonacci.c -o fibeverse

关于c - MIT OpenCourseWARE C/C++ 作业 1 无输出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21372190/

相关文章:

c - 关闭和打开二进制文件时读取它

c - 为什么执行此 C MPI 应用程序进行 Pi 近似时的结果总是相同?

c - 嵌入式系统 Linux 中 RAM 使用率最低的情况

c - 函数strtok的返回值中是否包含空字符?

c - 用星号替换帕斯卡三角形中的每个偶数?

c - 为什么使用 elm chan fatfs f_chdir 更改目录不会影响目录结构?

c++ - 为 C/C++ 中的多播守护程序获取客户端列表(事件客户端)(Gstreamer API 或 C 套接字)

c - 为什么我的 for 循环无限运行?

c - 如何使用 shift + ctrl 键在 C 中获得完全交互式的 bash 终端?

c - undefined variable 错误