C - 从最后一行读取文件问题
C - Reading from a file issue with the last line
我的作业程序的预期输入类似于
./program "hello" < helloworld.txt
。然而,这样做的问题是我必须分析程序中的每一行,所以我在行尾使用了守卫:
while((c = getchar()) != EOF) {
if (c == '\n') {
/*stuff will be done*/
但是,我的问题是如果 helloworld.txt
文件包含:
hello
world
它只会读取第一行(如果有更多行,则读取到倒数第二行)。
为了解决这个问题,我必须严格换行,使 helloworld.txt
看起来像:
hello
world
//
还有其他解决方法吗?
您需要重新构建您的程序,以便它可以 "do stuff" 在 EOF
上,如果它自上次换行后读取了任何字符。这样,仍会处理未终止的最后一行。
修正你的算法。而不是:
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
,则不应使用它。
我的作业程序的预期输入类似于
./program "hello" < helloworld.txt
。然而,这样做的问题是我必须分析程序中的每一行,所以我在行尾使用了守卫:
while((c = getchar()) != EOF) {
if (c == '\n') {
/*stuff will be done*/
但是,我的问题是如果 helloworld.txt
文件包含:
hello
world
它只会读取第一行(如果有更多行,则读取到倒数第二行)。
为了解决这个问题,我必须严格换行,使 helloworld.txt
看起来像:
hello
world
//
还有其他解决方法吗?
您需要重新构建您的程序,以便它可以 "do stuff" 在 EOF
上,如果它自上次换行后读取了任何字符。这样,仍会处理未终止的最后一行。
修正你的算法。而不是:
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
,则不应使用它。