0

我正在尝试从中读取stdinfgets这是从文件中读取的另一种方式。我的想法是我应该能够写尽可能多的行,并停止从标准输入读取CTRL+C is entered or any other bash terminating commands.

但是问题是,如果我写一行,例如:

mr:x:1171:1101:Mikael Rännar:/Home/staff/mr:/usr/local/bin/tcsh

然后我按下ENTER提交它,CTRL+C然后它计算我终止的行与前一行相同。这里有一些例子:

mr:x:1171:1101:Mikael Rännar:/Home/staff/mr:/usr/local/bin/tcsh
<BLANKLINE>
*I PRESSED CTRL+C HERE*
Output:
Line 2: Encountered a <BLANKLINE>
Line 3: Encountered a <BLANKLINE>
1171:mr

示例 2:

mr:x:1171:1101:Mikael Rännar:/Home/staff/mr:/usr/local/bin/tcsh 
*I PRESSED CTRL+C HERE*
Output:
1171:mr
1171:mr

所以我的问题是,当发送终止命令(CTRL+C)时,如何阻止程序复制前一行?

编辑:这是我用来从流中读取的代码

void readFile(FILE *fp, list *userList) {
    char line[1025];
    int lineNumber = 1;
    while (!feof(fp)) {
        user *newUser = malloc(sizeof(user));
        initializeStruct(newUser);
        fgets(line, 1025, fp);
        char *p = memchr(line, '\0', 1024);

        if (p == NULL) {
            fprintf(stderr, "Line %d: Line is too long!\n", lineNumber);
        } else {
            newUser->lineNumber = lineNumber;
            parseLine(line, newUser);
            list_insert(userList, newUser);
            lineNumber++;
        }
    }
}

CTRL+Dbash 中按下 时,fgets 命令使用输入的前一行。

谢谢

4

0 回答 0