簡體   English   中英

如何使用fscanf讀取文件

[英]how to read a file using fscanf

c我想使用fscanf以下列格式讀入文件。

 //text file
 push i
 push o
 pop
 push i
 pop 
 push a

一個詞然后是一個由空格分隔的角色。 然后將單詞指定給指針或var,並為char指定相同的單詞。 但我不斷收到分段錯誤。

FILE * fp("text.txt", "r");
char * word = malloc( 21 * sizeof *word );
char data;
int c, size , i, prev;
while(fscanf(fp, "%s %c[^\n]", word, data) != EOF) {
    printf("%s %c", word, data);
}

指針data未初始化,因此當fscanf嘗試取消引用它時,您會得到段錯誤。

你應該做的只是將它聲明為char (而不是char * ),並將最后的fscanf參數更改為&data

while(fscanf(fp, "%s %c[^\n]", word, &data) != EOF) {
                                     ^

此外, printf應該使用%c作為第二個說明符,而不是%s (因為您打印的是單個字符)。

一個問題是你試圖讀一個單詞后跟一個單詞,但有些單詞后面沒有字符。 fscanf不是一個好的選擇,因為它不擅長區分空格和換行 - 兩者都只考慮“空白”,所以它會讀取多行試圖匹配其模式,忽略換行符。

相反,讀取帶有fgets行,然后使用sscanf來解析每一行。

如果你真的必須使用fscanf,你可以使用類似的東西:

do {
    rv = fscanf(fp, "%s%*[ ]%c", word, &data);
    if (rv == 1) {
        /* read just a word -- no data character after it */
    } else if (rv >= 2) {
        /* read a word and a data character */
    }
} while (rv != EOF);

但這很復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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