C文件输入&产量

时间:2015-07-03 12:42:51

标签: c file-io

我制作了一个简单的字典代码,并浏览了一个小时,然后我找到了一个文件I / O代码。但我的编译器(我使用Microsoft Visual C ++)说我的代码(不幸的是,代码的核心部分)是错误的。但我无法得到它。究竟是什么错,为什么???

    /*
     DosDic ver 1.0.0 2015-07-03
    */




    #include<stdio.h>
    #include<string.h>




    char key = 0;                         
    FILE *fp;                             //set a file pointer var 
    fp = fopen("dicdata.dat","r");        //open a file
    int b = 0;
    int trial = 0;
    char result[];
    char searchfor[] = fp;                //save a whole list of dictionary in a var
    int i;
     char sb[];                            //var for search in a list
    int getsearchtrial(char sb[]){
        for(i=0;i=strlen(sb);i++){        //how much I tried to reach to the word
            switch((int)searchfor[b]-(int)sb[i]){  //are two alphabets same?
            case 0 :
            default : i=0;               
            }
        b++;                               //keep finding in a list
        trial++;                           //try again
        }
    return trial;                         
    }
    int adress;
    int mainpage(){
        printf("Type what you want to search : ");
        scanf("%c",sb[ ]);
        getsearchtrial(sb[ ]) - strlen(sb[ ]) = adress;  //where the word is located in the list
        for(i = adress;i = adress + 30; i++){  //print
            printf("%c",searchfor[i]);
        }
        printf("Thank you for using DosDic ver.1.0!"); //thank you!
    }
    void main(){                  //call all those functions
        mainpage();
        fclose(fp);           //close list
    }

    //and whats wrong with this? i cant even get it, but it's not working 

2 个答案:

答案 0 :(得分:3)

多个问题。

首先,您无法将fopen的结果分配给函数体外的fp;您必须将fp = fopen("dicdata.dat", "r");移到您的某个函数(getsearchtrial中)的正文中。

其次,您不是通过简单地将文件指针指向对象来读取文件;您必须使用fscanffreadfgets等库函数。假设您的文件包含长度为80的单个字符串,则需要编写类似

的内容
char searchfor[81] = {0}; // make sure string is initially empty,
                          // extra space for string terminator

if ( !fgets( searchfor, sizeof searchfor, fp) )
{
  // error reading from file
}

当然,这取决于输入文件的结构。如果它包含字符串列表,那么您将需要使用多维数组(或其他一些结构)。

第三,声明数组时,必须先指定其大小才能使用它。 resultsearchfor不完整的数组定义。

最后,这一行

getsearchtrial(sb[ ]) - strlen(sb[ ]) = adress; 

需要逆转;分配的目标必须位于赋值运算符的左侧。

您需要退后一步,学习如何从头开始编写C代码。

答案 1 :(得分:2)

有太多错误,我甚至不打算在这里逐条列出 - 大多数错误似乎源于你对C中数组的理解不足。

最值得注意的是......

  • 您不能声明数组,也不能初始化它或指定大小。
  • 您无法将FILE *分配给char数组(并期望体面 结果)。
  • 您无法执行fp = fopen之类的声明 像你这样的全球范围。

尝试this tutorial,你可以解决95%的问题,然后再去那里。