如何在控制台中将文件传递给.exe

时间:2015-11-04 16:47:49

标签: c file console

我目前正在通过阅读" C proggraming Language"来学习C. 我的练习问题涉及getchar() / putchar() / EOF的输入和输出。似乎用练习制作的程序应该用在文件上。但是,一旦我拥有.exe我只知道如何启动" raw" .exe,我想做类似的事情:myProgram.exe file.txt 这样程序就可以读取文件作为输入。不幸的是,我尝试这样做的方式不起作用,你能告诉我如何正确地做到这一点吗?

程序我想在文件上使用 (这是书中的代码,没有int main()或其他任何内容):

#include <stdio.h>

main()
{
    int c;
    while((c = getchar()) != EOF)
    {
         putchar(c);
    }
}

我在Windows 8.1上,使用cl(visual studio编译器),版本19 x64。

2 个答案:

答案 0 :(得分:1)

您需要使用命令行参数

 int main(int argc, char** argv)
{
//argc = number of arguments on command line

//argv[] = the file names on the command line. Note* the exe will always be argv[0]
}

在你的程序中,你可以将argv [1]称为你传入的文本文件。

./a.out myTextFile.txt

此处argc = 2且argv [0] = a.out而argv [1] = myTextFile.txt

我建议您在文件阅读期间修改代码以包含此内容。

答案 1 :(得分:0)

如果您使用的是Windows操作系统和cl,请执行以下操作。 另外,请参阅有关主C Standard - 5.1.2.2.1 Program startup

的c标准

1。重载主函数以接受命令行参数。

2. 使用cl.exe从命令行编译程序:

cl simple.c

3. 从命令行调用已编译的.exe

simple "filepath\filename"

请参阅MSDN演练Compiling a C Program on the Command Line

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

#define LINES_PER_PAGE 10
#define TRUE           1
#define FALSE          0


void print_file(char* file_name)
{
    FILE* f;
    int page_number = 1;
    int line_count;
    int c;
    int new_page = TRUE;

    assert(file_name != NULL);
    FILE** f2;
    if ((f = fopen(file_name, "r")) != NULL)
    {
        while ((c = fgetc(f)) != EOF)
        {
            if (new_page)
            {
                /* print out the header */
                printf("[%s] page %d starts\n", file_name, page_number);
                new_page = FALSE;
                line_count = 1;
            }
            putchar(c);
            if (c == '\n' && ++line_count > LINES_PER_PAGE)
            {
                /* print out the footer */
                printf("[%s] page %d ends\n", file_name, page_number);
                /* skip another line so we can see it on screen */
                putchar('\n');
                new_page = TRUE;
                page_number++;
            }
        }
        if (!new_page)
        {
            /* file ended in the middle of a page, so we still need to
            print a footer */
            printf("[%s] page %d ends\n", file_name, page_number);
        }
        /* skip another line so we can see it on screen */
        putchar('\n');
        fclose(f);
    }
}

int main(int argc, char* argv[])
{

    int i;

    if (argc < 2)
    {
        fputs("no files specified\n", stderr);
        return EXIT_FAILURE;
    }
    for (i = 1; i < argc; i++)
    {

        print_file(argv[i]);
    }
    return EXIT_SUCCESS;
}