fscanf(FILE, "%d", ...);
在掃描int
字符之前首先掃描並丟棄空白區域。在掃描空白區域時,' '
和'\n'
都被視爲相同,因此使用'%d'
會丟失行尾。
fscanf(FILE, "\n", ...);
和fscanf(FILE, " ", ...);
做同樣的事情:掃描和丟棄任何白色空間。使用「\ n」而不是只能掃描'\n'
。
代碼可以使用fscanf(FILE, "%d%*1[\n]%d %d", &a, &b, &c) == 3
,在a
之後找到'\n'
,但其他'\n'
可能潛伏在其他地方。
使用scanf()
家庭檢測'\n'
涉及使用'%c'
或'%[]'
或'%n'
的唯一途徑。使用fgets()
更容易,然後使用sscanf()
或strtol()
進行解析。
int Read1and2int(FILE *stream, int *a, int *b, int *c) {
char buf[100];
int n;
if (fgets(buf, sizeof buf, stream) == NULL) return EOF;
int count = sscanf(buf,"%d %n", a, &n);
// Non-numeric or extra data
if (count != 1 || buf[n]) return 0;
if (fgets(buf, sizeof buf, stream) == NULL) return 1;
count = sscanf(buf,"%d%d %n", b, c, &n);
// Non-numeric or extra data
if (count != 2 || buf[n]) return 1;
return 3;
}
它很不清楚你想要什麼。 – ameyCU
這裏你還不清楚,如果你正在從一個新行'\ n'分隔的文件中讀取數據,那麼你需要一個可以調用fgets()的循環,只要文件中沒有二進制數據。發佈您的程序的其餘部分,以便我們可以在這裏瞭解最終目標。 – Dave
'int a,b,c; char temp [2]; if(fscanf(FILE,「%d%c%d%c%d」,&a,&temp [0],&b,&temp [1],&c)!= 5 || temp [0]!='\ n' || temp {1]!=''){/ *文件中的數據格式無效* /}' –