繁体   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