我有一個關於文件指針的基本問題。在下面的代碼中,我有一個while循環,然後是for循環。 for循環只會顯示行數,除非我再次打開fopen - 是否正常?如果是這樣,我應該預先在while循環之後嗎?可能有一些我沒有意識到的「倒帶」功能,所以我的整個方法可能是錯誤的。我意識到while循環和for可以合併,但是這個我的問題是關於fopen,fclose並且再次使用來自fopen的數據。正確使用文件指針
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXLEN 200
enum { MAXLINES = 200 };
char lpath[MAXLINES][BUFSIZ];
int main(int argc, char **argv) {
char c;
int l = 0, n = 0, i = 0, count = 0;
char lines[MAXLINES][BUFSIZ];
FILE *fp = fopen(argv[1], "r");
if (fp == 0) {
fprintf(stderr, "failed to open input.txt\n");
exit(1);
}
while (l < MAXLINES && fgets(lines[l], sizeof(lines[0]), fp)) {
lines[l][strlen(lines[l])-1] = '\0';
puts(lines[l]);
l++;
}
// fp = fopen(argv[1], "r"); // below won't output unless fopen again
for (c = getc(fp); c != EOF; c = getc(fp)) {
if (c == '\n') {
count++;
}
printf(">> line count: %i", count);
fclose(fp);
}
1)更好地利用'fgetc'。 2)'都返回一個'int',而不是'char。 3)因此,你的'EOF'測試是錯誤的,並且如果'char'是未簽名的將會總是失敗! – Olaf
@Olaf:我從這裏得到了這段代碼:http://stackoverflow.com/a/4237107/5905926,所以也許讓他們知道......謝謝 –
「可能有一些」倒帶「功能,我不知道「 - 有!事實上,它被稱爲「倒帶」。 – immibis