2015-07-03 149 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代碼。