C - 从最后一行

时间:2015-09-18 12:47:56

标签: c newline

我的计划对我的任务的预期输入是这样的 ./program "hello" < helloworld.txt。然而,问题在于我必须分析程序中的每一行,所以我使用了守护作为一行的结尾:

while((c = getchar()) != EOF) {
    if (c == '\n') {
    /*stuff will be done*/

但是,我的问题是如果helloworld.txt文件包含:

hello
world

它只会读取第一行(如果有更多行,则直到第二行最后一行)。

为了解决这个问题,我必须严格地制作一个新的行,helloworld.txt看起来像:

hello
world
//

还有另外一种解决方法吗?

2 个答案:

答案 0 :(得分:5)

修复算法。而不是:

while((c = getchar()) != EOF) {
    if (c == '\n') {
        /* stuff will be done */
    } else {
        /* buffer the c character */
    }
}

执行:

do {
    c = getchar();
    if (c == '\n' || c == EOF) {
        /* do stuff with the buffered line */
        /* clear the buffered line */
    } else {
        /* add the c character to the buffered line */
    }
} while (c != EOF);

但请注意,如果c变量为EOF,则不应使用ssh_args= -i <path to pem file>变量的值。

答案 1 :(得分:3)

您需要重新构建您的程序,以便它可以在EOF上“执行”操作,如果它已读取自上一个换行符以来的任何字符。这样,仍然会处理未终止的最后一行。