fscanf没有按预期工作。

时间:2012-01-09 18:45:20

标签: c

我有一个包含3个单词的word文件。我需要将每个单词读成数组。我尝试使用fscanf()执行此操作,但它不起作用。我做错了什么?

#include <stdio.h>

void main(){
    char words_array[80];
    FILE *dictionary;
    dictionary = fopen("dictionary.txt", "r");
    fscanf (dictionary, "%s", words_array);
    printf("The content of words_array is: %s, %s, %s, \n", words_array[0], words_array[1], words_array[2]);
}

当我尝试编译时出现以下错误:

  

警告:格式'%s'需要类型'* char'的参数,但参数的类型为'int'

dictionary.txt文件如下:

apple
orange
bananna

全部谢谢!

3 个答案:

答案 0 :(得分:2)

假设dictionary.txt中一行中只有一个单词(水果)(且长度<80个字符),则以下内容应该有效!

#include <stdio.h>

int main(void)
{
    char words_array[80];
    FILE *dictionary;
    dictionary = fopen("dictionary.txt", "r");
    while (fscanf (dictionary, "%s", words_array) == 1) {
        printf("%s \n", words_array);
    }

    return 0;
}

输出:

$ gcc fsca.c 
$ ./a.out 
apple 
orange 
bananna 
$ cat fsca.c 

根据OP作者的请求添加替代答案。

#include <stdio.h>

int main(void)
{
    char word1[80], word2[80], word3[80];
    FILE *dictionary;
    dictionary = fopen("dictionary.txt", "r");
    fscanf(dictionary, "%s", word1);
    fscanf(dictionary, "%s", word2);
    fscanf(dictionary, "%s", word3);
    printf("%s %s %s\n", word1, word2, word3);

    return 0;
}

输出

$ gcc fsca.c 
$ ./a.out 
apple orange bananna
$ 

答案 1 :(得分:1)

您的变量words_array有80个字符的空间。你错误地认为你有80个字。 printf行打印第一个单词是:

printf("The content of words_array is: %s\n", words_array);

如果你想打印所有的行/单词,你需要将它包装在文件行的读者中:

while (fscanf (dictionary, "%s", words_array)) {
        printf("%s \n", words_array);
    }

阅读fscanf的手册页以了解原因。

[编辑]

而不是while循环:

char words_array[3][80];
for (int i = 0; i < 3; i++)
   fscanf(dictionary, "%s", words_array[i]);

[/编辑]

答案 2 :(得分:1)

char words_array [80]只是一个字符数组 - 不是字符串数组。

因此,当您尝试打印出words_array [0]等时,它们是字符,因此与%s不匹配。

此外,您还希望使用feof进行读取,直到文件结束。只需使用fscanf直到文件结尾,读取一个字符串并将其打印出来。