我目前正在通过阅读" 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。
答案 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;
}