【发布时间】:2016-04-15 23:36:48
【问题描述】:
过去三天我有一个问题.. 我有一个包含句子的文件。
当我阅读文件时
int maxSize = 256;
int currSize = 0;
int i = 0;
char *sentence = (char*)malloc(maxSize);
char c;
currSize = maxSize;
while ((c = fgetc(input)) != EOF)
{
sentence[i++] = c;
while((c = fgetc(input)) != '\n')
{
sentence[i++] = c;
if((c == '.') || (c == '?') || (c == '!'))
sentence[i++] = '\n';
if(i == currSize)
{
currSize = i + maxSize;
sentence = (char*)realloc(sentence,currSize);
}
}
}
sentence[i] = '\0';
addSentence(sentence);
当函数 addSentence 将句子添加到链表中时,会出现问题,因为它只添加了一个由文件中所有内容组成的句子......
我是 C 初学者。谢谢。
【问题讨论】:
-
所以基本上你的意思是问题出在
addSentence,和你展示的功能无关? -
使用
int c;而不是char c;,因为fgetc()返回一个int,它可以保存char可以保存的任何值加上一个额外的值——EOF。 -
跟功能有关。这是关于 \n 但我不知道如何解决它:/
-
您的问题是您只在 EOF 处调用
addSentence(),因此在您阅读整个文件之前它不会神奇地看到任何内容。据推测,您需要在检测到句子结尾时调用它(测试'.'、'?'或'!'— 您还需要在调用addSentence之前将字符串终止为空并重置具有新分配和正确大小的内存)以及EOF。不清楚为什么你有两个循环;您可能会错过一些换行符作为句子的结尾。只需一个循环即可返工。 -
我有一个 while 循环,但那个循环只读取一行,所以我想读取所有行,这就是垃圾函数..
标签: c file linked-list eof fgetc