为什么这个简单的程序会被编译?

时间:2014-03-18 01:33:24

标签: c

我只是尝试执行一个简单的程序执行程序并传递两个参数。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
    start = atoi(argv[1]);
    stop = atoi(argv[2]);
    for(start; start < stop; start++)
    {
        printf("hello");
    }
}

为什么这不起作用?当我编译它时,声明启动和停止。当我尝试将其作为像./file 3 5这样的可执行文件运行时,它会说“。”不被视为内部或外部命令。我在我的寡妇cmd提示符上使用了mingw。任何想法为什么它不会像我想要的那样运行?那就是:编译,输入可执行文件./file 3 5然后它像正常一样运行?

4 个答案:

答案 0 :(得分:3)

那是因为你没有宣布开始或停止。您必须先声明变量才能使用它们。它们不只是凭空出现。

答案 1 :(得分:2)

试试这个

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
    int start = atoi(argv[1]);
    int stop = atoi(argv[3]);
    for(start; start < stop; start++)
    {
        printf("hello");
    }
}

答案 2 :(得分:2)

你正在使用的Windows shell基本上是DOS-ish的东西。 ./prog不起作用,因为斜杠不是目录分隔符。您必须使用.\prog,或仅使用prog,因为.始终隐含PATH

除此之外,您还缺少startstop的声明,其他答案和评论也很清楚。

答案 3 :(得分:1)

好吧,你实际上是在不声明它们的情况下使用 start stop 变量。

您正在传递两个应该是整数的主要字符串( argv [1] argv [2] );因此,您需要将 start stop 变量作为整数。

因此,您有两个选择(相同,只需选择您喜欢的选项):

int start = atoi(argv[1]);
int stop = atoi(argv[2]);

int start, stop;
start = atoi(argv[1]);
stop = atoi(argv[2]);