我有一个程序可以打开一个文本文件并逐行读取。它还将每行放入一个数组中。当我使用此函数并尝试使用 printf 语句中的每一行时,会添加新行字符。
我的代码:
char fileContents[MAX_LINES][MAX_LINE_LENGTH];
int lineCount = 0;
FILE *ifp = fopen("Tree-B.txt", "r");
if (ifp == NULL)
{
printf("Error opening file!n");
exit(1);
}
while (fgets(fileContents[lineCount++], MAX_LINE_LENGTH, ifp) != NULL);
fclose(ifp);
printf("Name: %s is now %s", fileContents[0], fileContents[1]);
其输出如下:
Name: Tree Bacon
is now 30.21
printf 正在添加新行字符,我似乎无法发现为什么会发生这种情况。
从我的文本文件中读取的两行是:
Tree Bacon
30.21
我最喜欢的删除fgets
读取的尾随newline
的方法是使用strcspn
while (fgets(fileContents[lineCount], MAX_LINE_LENGTH, ifp) != NULL) {
fileContents[lineCount] [ strcspn(fileContents[lineCount], "rn") ] = 0;
linecount++;
}
当然,您必须推迟递增数组索引。
由于 fgets
还存储尾随换行符,因此您可以使用 strchr
将其删除:
char *ptr;
while (fgets(fileContents[lineCount], MAX_LINE_LENGTH, ifp) != NULL) {
ptr = strchr(fileContents[lineCount], 'n');
if (ptr != NULL) {
*ptr = ' ';
}
linecount++;
}