2015-07-03 195 views
-5

我做了一个简单的字典代码,冲浪了一个小时,并且我找到了一个文件I/O代码。但我的编译器(我使用Microsoft Visual C++)说我的代码(不幸的是,代码的核心部分)是错误的。但我无法得到它。什么是错误的,为什么?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 
+5

它有什么问题?你的编译器告诉你什么?什么是确切的错误/警告? – user463035818

+0

我们需要编译器错误/警告和/或预期的和实际的输出来帮助你 – LBes

回答

2

有这么多错,我也不打算在这里itemise这一切 - 大部分似乎从你缺乏阵列的理解C.干

最值得注意的是...

  • 您不能声明数组,也不能初始化它或指定大小。
  • 您不能将FILE *分配给char数组(并且期望得到不错的 结果)。
  • 您不能像您一样在 全球范围内执行像fp = fopen这样的陈述。

尝试this tutorial并且您可以修复95%的问题,然后从那里开始。

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代码。