簡體   English   中英

C中的fscanf沒有讀完整行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM