我有一个包含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
全部谢谢!
答案 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直到文件结尾,读取一个字符串并将其打印出来。