2015-09-30 37 views
-1

我實際上沒有一個但2到3個程序使用文件和他們的命令,如fopen,fscanf,while(strcmp(input,「E」)! = 0).Atleast,我認爲這是問題所在。所有這些程序顯示相同的錯誤,即調試斷言失敗!表達式(stream!= null)。我嘗試了一切,但似乎沒有任何幫助。我不知道該怎麼做。請儘快回覆。這是其中一個程序:debug assertion expression stream!= null每當我使用fopen

# include <stdio.h> 
    # include <conio.h> 
    # include <string.h> 
    # include <stdlib.h> 
    void main() 
    { char add[6],length[10],input[10],binary[12],bitmask[12],relocbit; 
     int start,inp,len,i,address,opcode,addr,actualadd; 
     FILE *fp1=fopen("relinput.dat","r"); 
     FILE *fp2=fopen("reloutput.dat","w"); 
     system("cls"); 
     printf("Enter the actual starting address : "); 
     scanf("%d",&start); 
     fscanf(fp1,"%s",input); 
     while(strcmp(input,"E")!=0) 
     { if(strcmp(input,"H")==0) 
     { fscanf(fp1,"%s",add); 
      fscanf(fp1,"%s",length); 
      fscanf(fp1,"%s",input); 
      } 
     if(strcmp(input,"T")==0) 
     { fscanf(fp1,"%d",&address); 
      fscanf(fp1,"%s",bitmask); 
      address+=start; 
      len=strlen(bitmask); 
      for(i=0;i<len;i++) 
      { fscanf(fp1,"%d",&opcode); 
       fscanf(fp1,"%d",&addr); 
       relocbit=bitmask[i]; 
       if(relocbit=='0') 
        actualadd=addr; 
       else 
        actualadd=addr+start; 
       fprintf(fp2,"%d\t%d%d\n",address,opcode,actualadd); 
        address+=3; 
      } 
      fscanf(fp1,"%s",input); 
     } 
     } 
     fclose(fp1); 
     fclose(fp2); 
     printf("FINISHED"); 
     getch(); 
     } 
+6

向程序添加錯誤檢查。幾乎不可能在沒有錯誤檢查的情況下調試(甚至使用)程序。例如,在每次調用'fopen'之後,檢查返回值爲NULL。檢查'scanf'和'fscanf'的返回值。 –

+2

請格式化您的代碼。 – ameyCU

回答

0

您需要對您的fopen程序和一般錯誤進行檢查。這個錯誤很可能是由於fscanf或fopen返回了一個你沒有發現的意外值。

更多有用的技巧:

  • 調試用的斷點,如果你的IDE可以讓您
  • 格式代碼,以更加符合,容易閱讀的
  • 評論上的功能,以明確他們做什麼,爲未來的讀者或你未來的自我。
相關問題