我正在尝试掌握在 C 中处理文件的能力,但我遇到了一个无法通过的问题。我整天都在寻找信息,但似乎找不到我要找的东西。我想给文件中的行编号。例如,如果我输入有关一本书的信息(比如说:姓名、播出日期和身份证),我希望在我的文件中出现这样的内容:
1. Name:Dave Air-Date:1997 id:123
我希望它能够自我更新。假设我关闭程序并再次运行它,计数应该从 2 开始。
我唯一的问题是给行编号。有人可以指出正确的方向如何做到这一点,或者给我看一个示例源代码吗?
我正在尝试掌握在 C 中处理文件的能力,但我遇到了一个无法通过的问题。我整天都在寻找信息,但似乎找不到我要找的东西。我想给文件中的行编号。例如,如果我输入有关一本书的信息(比如说:姓名、播出日期和身份证),我希望在我的文件中出现这样的内容:
1. Name:Dave Air-Date:1997 id:123
我希望它能够自我更新。假设我关闭程序并再次运行它,计数应该从 2 开始。
我唯一的问题是给行编号。有人可以指出正确的方向如何做到这一点,或者给我看一个示例源代码吗?
您可以一个一个地处理每个字符,并在遇到回车 ( \n
) 时增加一个在字符之前打印的计数器。
在伪代码中:
lineNumber = 1;
Open the file
While ((c = read a character) is not EOF)
If (c is \n)
Print "lineNumber", then increment it
Print c
End while
Close the file
为时已晚,但我希望它有所帮助。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
/* user input */
char text[50];
char res[100] = "";
printf("Enter a short story (<100 characters): ");
char ch;
char *ptr = text;
while ((ch = getchar()) != EOF) {
*ptr++ = ch;
}
printf("\nYou've entered this text:\n");
printf("%s\n", text);
/* append and create a new text */
strcat(res, "0: ");
char *qtr = text;
int i = 1;
while (*qtr != '\0') {
if (*qtr != '\n') {
char temp[2];
sprintf(temp, "%c", *qtr);
strcat(res, temp);
} else {
char temp[5];
sprintf(temp, "\n%d: ", i++);
strcat(res, temp);
}
qtr++;
}
printf("\nLine number added: \n");
printf("%s\n", res);
return 0;
}