[英]fscanf in C not reading full lines?
這非常簡單,但我只是遇到了問題。
文本文件有一個標題,
例如,
# Avizo BINARY-LITTLE-ENDIAN 2.1
define Lattice 496 384 470
Parameters {
AlignTransform {
slice0000 0 -0 -30 -1,
slice0001 0 -0 -30 -1,
slice0002 0 -0 -30 -1,
我正在嘗試使用fscanf讀取每一行。
int i;
for ( i = 0; i < 10; i++ ) {
fscanf(fp, "%s\n", buf);
printf("%d) %s\n",i,buf);
}
結果如此
0) #
1) Avizo
2) BINARY-LITTLE-ENDIAN
3) 2.1
4) define
5) Lattice
6) 496
7) 384
8) 470
9) Parameters
所以它解析空格而不是換行符。 不確定發生了什么。
我建議您使用fgets
,但如果您堅持使用fscanf
:
fscanf(fd, "%[^\n]\n", buff);
這將讀完整行。
fscanf
的%s
說明符讀取單詞,因此在到達空格時會停止。
使用fgets
讀取整行。
雖然%s可能意味着“字符串”,但fscanf(作為scanf)不是一個貪婪的東西,你應該告訴它分隔符是“新行”。 並且,您最好設置maxinum緩沖區大小以防止緩沖區溢出。
#include <stdio.h>
#define NAME_MAX 80
#define NAME_MAX_S "80"
int main(void)
{
static char name[NAME_MAX + 1]; // + 1 because of null
if(scanf("%" NAME_MAX_S "[^\n]", name) != 1)
{
fputs("io error or premature end of line\n", stderr);
return 1;
}
printf("Hello %s. Nice to meet you.\n", name);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.