C程序在逐行读取文本文件时添加空格
我有一个程序,可以打开一个文本文件并逐行读取。它还将每一行放入一个数组中。当我使用此函数并尝试使用printf语句中的每一行时,会添加新行字符 我的代码:C程序在逐行读取文本文件时添加空格,c,file,text,line,newline,C,File,Text,Line,Newline,我有一个程序,可以打开一个文本文件并逐行读取。它还将每一行放入一个数组中。当我使用此函数并尝试使用printf语句中的每一行时,会添加新行字符 我的代码: char fileContents[MAX_LINES][MAX_LINE_LENGTH]; int lineCount = 0; FILE *ifp = fopen("Tree-B.txt", "r"); if (ifp == NULL) { printf("Error openin
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
还存储尾随换行符,因此可以使用strchr
将其删除:
char *ptr;
while (fgets(fileContents[lineCount], MAX_LINE_LENGTH, ifp) != NULL) {
ptr = strchr(fileContents[lineCount], '\n');
if (ptr != NULL) {
*ptr = '\0';
}
linecount++;
}
我最喜欢用
strcspn
while (fgets(fileContents[lineCount], MAX_LINE_LENGTH, ifp) != NULL) {
fileContents[lineCount] [ strcspn(fileContents[lineCount], "\r\n") ] = 0;
linecount++;
}
当然,您必须推迟增加数组索引。
printf
没有添加任何内容。换行符位于原始文件中。fgets
保留输入中的换行符
。printf
不添加任何内容,换行符位于数据中fgets()
在中读取行时包含换行符。