我对 C/C++ 知之甚少,所以我决定在线学习 MIT 的 OpenCourseWare 类(class)。大约 8 年前,我上了两年的 Java 类(class),最近有大约 4 年的 MATLAB 经验。
在努力完成编译器设置之后,我设法在 Eclipse IDE 中完成了第一个实验。我可以在 Eclipse 或 cmd 中运行 Hello World 代码,它们将输出我在代码中拥有的任何文本。我正在做“作业 1”,我已对 .C 文件的答案进行了修改。
它似乎编译并生成 .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.c
和reverse.c
不包含其相应的 header ,fibonacci.c
和reverse.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/