如何丢弃C中的其余部分

时间:2014-04-26 17:35:08

标签: c

我试图编写一个删除C中其余部分的函数。我传入一个char数组和一个文件指针(从中读取char数组)。数组中只有80个字符,如果数组中没有换行符,则读取(并丢弃)文件中的字符,直到找到它(换行符)。这是我到目前为止所做的,但它似乎没有起作用,而且我不确定我做错了什么。任何帮助将不胜感激!这是关于函数应该做什么的给定信息:

discardRest - 如果fgets没有读取换行符而不读取整行。此函数将最近读取的行和指向正在读取的文件的指针作为输入。 discardRest在输入行中查找换行符。如果换行符不在行中,则该函数会读取(并丢弃)文件中的字符,直到读取换行符。这将导致文件指针定位到输入文件中下一行的开头。

以下是代码:

void discardRest(char line[], FILE* file)
{
    bool newlineFound = FALSE;
    int i;
    for(i = 0; i < sizeof(line); i++)
    {
        if(line[i] == '\n') newlineFound = TRUE;
    }
    if(!newlineFound)
    {
        int c = getc(file);
        while(c != '\n')
        {
            c = getc(file);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你的方式太难了,除了sizeof总是给出其操作数的大小,这是一个指针,而不是它指向你认为它的数组。

fgets有以下合同:

  • return NULL:某种错误,请勿使用缓冲区,其内容可能不确定。
  • 否则缓冲区包含一个以0结尾的字符串,如果缓冲区和文件都足够大,则最后一个非0是保留'\n'

因此,这应该有效:

  1. 因此,请使用strlen()来获取缓冲区长度。
  2. 确定是否读取了整行(length && [length-1] == '\n')
  3. 视情况而定:
    • 删除换行符并返回。
    • 像你试过的那样丢弃剩余的一行。