修改testcat.c的源代码,使得打印内容时,可以同时输出行号,即./testcat -n testcat.c的效果与运行cat -n testcat.c的效果相同。
时间: 2024-03-10 16:45:58 浏览: 79
好的,我可以帮你修改testcat.c的源代码以实现该功能。你可以按照以下步骤操作:
1. 打开testcat.c文件,找到main函数中的while循环。
2. 在循环内部增加一个计数器变量,用于记录当前输出的行号。初始值为1。
3. 在循环内部的printf语句中,使用格式化字符串输出行号和内容。例如,可以使用"%d %s"的格式化字符串,其中"%d"表示输出行号,"%s"表示输出内容。
4. 在程序开头增加一个命令行参数解析的代码块,用于处理命令行参数。如果用户输入了"-n"参数,则将一个标志变量设为真。
5. 在循环内部判断标志变量的值,如果为真,则输出行号,否则不输出。
修改后的testcat.c代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *filename;
FILE *fp;
char buffer[1024];
int line_number = 1;
int print_line_number = 0; // 标志变量,判断是否输出行号
if (argc < 2) {
fprintf(stderr, "Usage: %s filename [-n]\n", argv[0]);
exit(1);
}
filename = argv[1];
if (argc == 3 && strcmp(argv[2], "-n") == 0) {
print_line_number = 1;
}
fp = fopen(filename, "r");
if (fp == NULL) {
fprintf(stderr, "Error opening file %s\n", filename);
exit(1);
}
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
if (print_line_number) {
printf("%d %s", line_number, buffer);
} else {
printf("%s", buffer);
}
line_number++;
}
fclose(fp);
return 0;
}
```
你可以编译并运行修改后的程序,使用以下命令:
```
gcc -o testcat testcat.c
./testcat testcat.c -n
```
输出结果应该与cat -n testcat.c的结果相同。
阅读全文