我有一个从txt文件中读取的C程序。文本文件包含单词列表,每行一个单词。我想要做的是从文本文件中获取单词并将其打印为一个句子/段落,但是,当我尝试打印它们时,它们仍然每行打印一个单词。 当我从文件中读取它时,我将这些单词存储在2d char数组中。我认为发生的是数组从txt文件复制换行符,这是正确的吗?如果是这样,如何在没有新行char的情况下将单词添加到数组中?
while(fgets(line,20,lineRead)!=NULL)
{
for(j = 0; j < 20;j++)
{
message[k][j]= line[j];
}
printf("%s", message[k]);
}
我尝试了几次while循环但没有成功:
while(line[j] != ' ')
while(line[j] != NULL)
while(line[j] != EOF)
while(line[j] != ' \')
我正在学习C所以请在我的错误中具体说明。我想了解我做错了什么,而不只是得到答案。
谢谢!
答案 0 :(得分:1)
fgets函数包括您正在阅读的缓冲区中的换行符\ n。只需在循环中包含一个条件语句即可复制除\ n和\ r \ n之外的所有字符。类似的东西:
if ( line[j] != '\n' && line[j] != '\r' ) {
/* Copy the character in your new buffer */
}
答案 1 :(得分:1)
换行符是字符串的一部分,您需要删除它们:
#include <string.h>
while(fgets(line,20,lineRead)!=NULL)
{
char* newline_pos = strpbrk (line, "\n\r"); // get first occurance of newline or carriage return
if (newline_pos)
*newline_pos = '\0';
printf("%s ", line);
}
答案 2 :(得分:1)
您只需将for循环更改为:
for(j = 0; j < 20 && line[j] != '\n';j++)
{
message[k][j]= line[j];
}
if(j < 20)
message[k][j] = '\0';
答案 3 :(得分:0)
你应该这样做:
while(fgets(line,20,lineRead)!=NULL)
{
strcpy(message[k], line);
if(message[k][strlen(line)-1] == '\n')
message[k][strlen(line)-1] = '\0']
printf("%s", message[k]);
}
这样做是将line
复制到message[k]
中,然后删除最后一个字符(如果是换行符)。我们正在检查最后一个字符,因为文档说“新行字符会使fgets停止读取,但它被函数视为有效字符,并包含在复制到str的字符串中。”因此,如果存在换行符,则它将是最后一个字符。