fscanf til EOF逐字保存文件内容

fscanf til EOF逐字保存文件内容,c,scanf,C,Scanf,嗨,我正试图制作一个代码,通过fscanf读取文件,找到文件中所有单独的单词,并将其保存在数组中,但它不起作用。你能告诉我目前我的代码有什么问题吗 char data[300][45]; char words[100]; char garbage[10]; #include <stdio.h> int main(void) { int i=0,j; FILE* file=fopen("week4_data1.in","r"); while((fscanf(file,"%[a-zA

嗨,我正试图制作一个代码,通过fscanf读取文件,找到文件中所有单独的单词,并将其保存在数组中,但它不起作用。你能告诉我目前我的代码有什么问题吗

char data[300][45];
char words[100];
char garbage[10];

#include <stdio.h>

int main(void)
{
int i=0,j;
FILE* file=fopen("week4_data1.in","r");
while((fscanf(file,"%[a-zA-Z]s",data[i++]))!=EOF && (fscanf(file,"%[^a-zA- Z]s",garbage))!=EOF);
for(j=0;j<i;j++)
printf("%s",data[j]);
return 0;
char数据[300][45];
字符字[100];
煤焦垃圾[10];
#包括
内部主(空)
{
int i=0,j;
FILE*FILE=fopen(“week4_data1.in”,“r”);
而((fscanf(文件,“%[a-zA-Z]s”,数据[i++])!=EOF&&(fscanf(文件,“%[^a-zA-Z]s”,垃圾))!=EOF);

对于(j=0;j,您可以按照以下方法完成工作

  • 打开文件。帮助:
  • 检查打开是否成功。提示:返回值
  • 从文件中读取一行。检查是否成功。帮助:并返回值
  • 开始标记读取行并逐个存储到数组中。帮助:
  • 继续,直到令牌为空
  • 继续,直到
    fgets()
    为空
  • 格式字符串
    “%[a-zA-Z]s”
    “%^[a-zA-Z]s”
    不正确。这些格式字符串中不需要
    s
    。请使用
    “%[a-zA-Z]”和
    “%^[a-zA-Z]”

    我有一种感觉可以解决你的问题

    要使代码健壮,应指定格式字符串中的最大字符数,并确保
    i
    不超过有效限制

    while( i < 300 &&
           fscanf(file,"%44[a-zA-Z]",data[i++]) != EOF &&
           fscanf(file,"%9[^a-zA-Z]",garbage) != EOF );
    
    while(i<300&&
    fscanf(文件“%44[a-zA-Z]”,数据[i++])!=EOF&&
    fscanf(文件“%9[^a-zA-Z]”,垃圾)!=EOF);
    
    你听说过段落吗?请正确编排/缩进你的问题。这是我关于堆栈溢出的第一篇文章,社区比我想象的要敌对得多,是的,我知道这从技术上讲是一个段落,但我认为它足以让我的思想得到理解\n请先阅读第页。见下面Dilip的答案。打断你的活动“while((fscanf)”这一行是一团乱麻,无法一步一步地通过。少考虑“聪明的代码”,多考虑“如何编写代码以便调试”。