如何在 C 中为输入和输出文件获取命令行参数 运行
How to get Command Line Arguments running in C for input and output files
我正在尝试 运行 在 CMD 开发人员提示符下创建一个应用程序,它应该有一个输入文件和一个使用命令行参数的输出文件(我不明白,或者无法理解)大约)。但是当我这样做时,它 运行 正在结束,但没有任何内容被打印到输出文件。
以下是我的代码,其中不相关的代码已编辑。我不知道我是在代码中还是在 cmd 行开发人员提示中做错了。
该应用名为 printlines.exe
,我的命令如下所示:
printlines.exe -i file.java -o output.txt
如有任何建议,我们将不胜感激。
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define LINE 1000
void countLines(int *emptyLines, int *totalLines, int *totalComments, char *fileName, FILE *readFile)
{
char line[LINE]; // set array to store input file data
//set variables
readFile = fopen(fileName, "r");
int lines = 0;
int comments = 0;
int empty = 0;
while (fgets(line, LINE, readFile) != NULL) //while loop that reads in input file line by line
{
/*counts lines in input file works when not using
command line arguments redacted to shorten */
}
fclose(readFile);
*emptyLines = empty;
*totalLines = lines;
*totalComments = comments;
}
int main(int argc, char *argv[])
{
FILE *inputFile;
FILE *outputFile;
char *outputName;
char *inputName;
inputName = argv[1];
outputName = argv[2];
inputFile = fopen(inputName, "r");
outputFile = fopen(outputName, "w");
int emptyLines, totalLines, totalComments;
countLines(&emptyLines, &totalLines, &totalComments, inputName, inputFile);
int character;
bool aComment = false;
while ((character = fgetc(inputFile)) != EOF)
{
/* code that writes info from input to output, works
when not using command line arguments redacted to shorten*/
}
//close files
fclose(inputFile);
fclose(outputFile);
printf("There are %d total lines, %d lines of code and %d comments in the file\n", totalLines, emptyLines, totalComments);
return 0;
}
没有执行任何错误检查,既不检查命令行参数也不检查打开文件的错误。我敢打赌,如果您执行以下操作,您会很快查明问题所在:
//....
if(argc < 5){ // check arguments
fprintf(stderr, "Too few arguments");
return EXIT_FAILURE;
}
inputFile = fopen(inputName, "r");
if(inputFile == NULL){ // chek if file was open
fprintf(stderr, "Failed to open input file\n");
return EXIT_FAILURE;
}
outputFile = fopen(outputName, "w");
if(outputFile == NULL){ // again
fprintf(stderr, "Failed to open output file\n");
return EXIT_FAILURE;
}
//...
请注意,您的命令行字符串有 5 个参数,文件名位于索引 2 和 4,因此您需要:
inputName = argv[2];
outputName = argv[4];
或者只是删除 -i
和 -o
,因为它们似乎什么也没做。
我还应该注意,您可以直接在 fopen
或函数中使用命令行参数,不需要两个额外的指针:
inputFile = fopen(argv[2], "r");
outputFile = fopen(argv[4], "w");
//...
countLines(&emptyLines, &totalLines, &totalComments, argv[2], inputFile);
我正在尝试 运行 在 CMD 开发人员提示符下创建一个应用程序,它应该有一个输入文件和一个使用命令行参数的输出文件(我不明白,或者无法理解)大约)。但是当我这样做时,它 运行 正在结束,但没有任何内容被打印到输出文件。
以下是我的代码,其中不相关的代码已编辑。我不知道我是在代码中还是在 cmd 行开发人员提示中做错了。
该应用名为 printlines.exe
,我的命令如下所示:
printlines.exe -i file.java -o output.txt
如有任何建议,我们将不胜感激。
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define LINE 1000
void countLines(int *emptyLines, int *totalLines, int *totalComments, char *fileName, FILE *readFile)
{
char line[LINE]; // set array to store input file data
//set variables
readFile = fopen(fileName, "r");
int lines = 0;
int comments = 0;
int empty = 0;
while (fgets(line, LINE, readFile) != NULL) //while loop that reads in input file line by line
{
/*counts lines in input file works when not using
command line arguments redacted to shorten */
}
fclose(readFile);
*emptyLines = empty;
*totalLines = lines;
*totalComments = comments;
}
int main(int argc, char *argv[])
{
FILE *inputFile;
FILE *outputFile;
char *outputName;
char *inputName;
inputName = argv[1];
outputName = argv[2];
inputFile = fopen(inputName, "r");
outputFile = fopen(outputName, "w");
int emptyLines, totalLines, totalComments;
countLines(&emptyLines, &totalLines, &totalComments, inputName, inputFile);
int character;
bool aComment = false;
while ((character = fgetc(inputFile)) != EOF)
{
/* code that writes info from input to output, works
when not using command line arguments redacted to shorten*/
}
//close files
fclose(inputFile);
fclose(outputFile);
printf("There are %d total lines, %d lines of code and %d comments in the file\n", totalLines, emptyLines, totalComments);
return 0;
}
没有执行任何错误检查,既不检查命令行参数也不检查打开文件的错误。我敢打赌,如果您执行以下操作,您会很快查明问题所在:
//....
if(argc < 5){ // check arguments
fprintf(stderr, "Too few arguments");
return EXIT_FAILURE;
}
inputFile = fopen(inputName, "r");
if(inputFile == NULL){ // chek if file was open
fprintf(stderr, "Failed to open input file\n");
return EXIT_FAILURE;
}
outputFile = fopen(outputName, "w");
if(outputFile == NULL){ // again
fprintf(stderr, "Failed to open output file\n");
return EXIT_FAILURE;
}
//...
请注意,您的命令行字符串有 5 个参数,文件名位于索引 2 和 4,因此您需要:
inputName = argv[2];
outputName = argv[4];
或者只是删除 -i
和 -o
,因为它们似乎什么也没做。
我还应该注意,您可以直接在 fopen
或函数中使用命令行参数,不需要两个额外的指针:
inputFile = fopen(argv[2], "r");
outputFile = fopen(argv[4], "w");
//...
countLines(&emptyLines, &totalLines, &totalComments, argv[2], inputFile);