『壹』 編譯程序時出現沒有錯誤但有警告的原因
沒法錯誤是因為編譯器沒有檢查出語法錯誤,有警告是因為有些可能寫的不太規范,有時也是不標准,比如你定義一個變數,但是在程序中沒有使用它,編譯程序時就會警告「定義了沒有使用的變數」,如果你用fopen打開文件,編譯是就會提示「fopen是一個不安全的函數」等等。但是警告一般不會影響程序的正確性。
『貳』 c語言問題 代碼沒有錯 但是編譯出錯
代碼有錯,修改如下:
#include <stdio.h>
int a[300], cnt=0 ;
double pjz1=0.0, pjz2=0.0 ;
void readDat();
void writeDat();
void jsValue()
{int i,a1,b1,c1,d1;
for(i=0;i<300;i++)
{a1=a[i]/1000;
b1=a[i]/100%10;
c1=a[i]/10%10;
d1=a[i]%10;
if(d1-a1-b1-c1==0)
{ cnt++;
pjz1+=a[i];
}
else pjz2+=a[i];
}
if(cnt==0) pjz1=0;
else pjz1/=cnt;
if(300-cnt==00) pjz2=0;
else pjz2/=300-cnt;
}
main()
{
int i ;
readDat() ;
jsValue() ;
writeDat() ;
printf("cnt=%d\n滿足條件的平均值pzj1=%7.2lf\n不滿足條件的平均值pzj2=%7.2lf\n", cnt,pjz1,pjz2);
}
void readDat()
{
FILE *fp ;
int i ;
fp = fopen("C:\\WEXAM\\35990001\\in.dat","r") ;
for(i = 0 ; i < 300 ; i++) fscanf(fp, "%d,", &a[i]) ;
fclose(fp) ;
}
void writeDat()
{
FILE *fp ;
fp = fopen("C:\\WEXAM\\35990001\\out.dat","w") ;
fprintf(fp, "%d\n%7.2lf\n%7.2lf\n", cnt, pjz1, pjz2) ;
fclose(fp) ;
}
『叄』 為什麼我的程序沒錯誤卻編譯不了
是版本問題,不用擔心
這是6.0版的
『肆』 為什麼編譯沒有錯誤,運行卻有錯誤
編譯沒有錯誤是因為你的程序語法沒有錯誤.
而運行時則有可能出現邏輯錯誤.
比如說C#里最常見的"未將對象引用設置到對象的實例",就是說一個對象並沒有實力化,或者沒有值就去引用了.
再比如連接資料庫,語法正確,但是運行時卻因為SQL未啟動或者連接字元串拼寫錯誤而發生異常.
『伍』 求JAVA高手解決沒有錯的程序 但編譯時出現了錯 請問是什麼原因 是我的電腦問題嗎我編譯其他程序也是這樣
你這個程序是沒有錯誤的,但是輸出的是:null的年齡是:0
因為你的構造方法中定義的name和age是局部變數,如果改成這樣是可以的
public class Person3{
String name;
int age;
Person3(){
name = "ABC";
age = 20;
}
void display(){
System.out.println(name +"的" +"年齡是:"+ age);
}
public String toString() {
return "Name: " + name + " Age: " + age;
}
public static void main(String[] args){
Person3 d = new Person3();
System.out.println(new Person3()); //此處輸出:Name: ABCAge: 20
}
}
原因是因為構造函數中有name和age變數(只是局部變數被初始化了,跟外面的name和age不是一個概念)被初始化了。
在display()方法中訪問的變數是成員變數,即String name; int age; 而成員變數如果不賦值的話,String類型默認是null,int類型默認是0。
至於你的錯誤,你沒把代碼貼上來啊,是從控制台接收輸入值吧!
『陸』 已經沒有語法錯誤了,代碼編譯不成功,怎麼破
不正確地創建代碼時就會出現語法錯誤。包括錯誤地輸入關鍵字,遺漏了不必要的標點符號或者是不正確的結構(例如,For語句少了相應的Next語句,或If關鍵字所在的行沒有條件運算符)。
VisualBasic包含有【自動語法檢測】選項,可以在用戶編寫程序時檢測和更正語法錯誤。如果使用了這個選項,VisualBasic就會在用戶輸入程序時解釋這個程序。當它發現錯誤時,就會加亮顯示這個程序代碼並顯示一個消息框來解釋原因和提供幫助。這樣用戶就可以在繼續編程之前更正錯誤。
在【工具】菜單中,單擊【選項】命令,在【選項】對話框中,單擊【編輯器】選項卡,單擊【自動語法檢測】選項。
當程序語句試圖執行一條不可能執行的操作時,就會發生運行時錯誤。
常見的運行時錯誤是試圖從一個不存在的文件中讀取數據,另一個是試圖執行被零除的操作。
在用戶的程序中為這些錯誤提供出錯處理函數和錯誤處理常式是很重要的。有關錯誤處理函數,更詳盡的信息請參考第八章「處理錯誤」。
當應用程序不能按期望的方式執行時會發生邏輯錯誤。這些錯誤是很難發現的。因為應用程序的語法完全合法,運行時也不執行非法操作,但是仍然會產生錯誤。這類錯誤通常不會產生出錯消息。驗證應用程序執行的唯一方法就是測試它並分析運行結果。
希望我能幫助你解疑釋惑。
『柒』 c語言helloworld代碼是對的,但編譯錯誤
寫c語言的時候,如果代碼沒錯,這只能說明語法沒有出錯,直接導致的結果就是能編譯通過,並不意味著執行的結果就是正確的。影響c語言代碼執行結果的因素非常多。
一、指針的不正確運用;
二、變數精度問題。char,int,unsigned int,long ,float等,如果變數精度使用不正確,也會影響運算結果;
三、運算符的應用不正確。例如除,取余的區別;
四、正負符號位;
五、運算符的優先順序使用;
六、編譯器不同。各種編譯器也可能造成結果不一致;
C語言雖然是一門比較簡單的語言,但是要掌握這些細節,其實並不容易。
『捌』 程序編譯錯誤不知道是什麼原因
不能通編譯過的程序實際上還不是合法的程序,因為它不滿足C語言對於程序的基本要求。
檢查語法錯誤的第一要義:集中力量檢查系統發現的第一個錯誤,弄清並改正它。
在編譯過程中系統發現的錯誤主要有兩類:基本語法錯誤和上下文關系錯誤。這些錯誤都在表面上,可以直接看得見。也是比較容易弄清,比較容易解決的。關鍵是需要熟悉C語言的語法規定和有關上下文關系的規定,按照這些規定檢查程序正文,看看存在什麼問題。
編譯中系統發現錯誤都能指出錯誤的位置。不同系統在這方面的能力有差異,在錯誤定位的准確性方面有所不同。有的系統只能指明發現錯誤的行,有的系統還能夠指明行內位置。
一般說,系統指明的位置未必是真實錯誤出現的位置。通常情況是錯誤出現在前,而系統發現錯誤在後,因為它檢查到實際錯誤之後的某個地方,才能確認出了問題,因此報出錯誤信息。要確認第一個錯誤的原因,應該從系統指明的位置開始,在那裡檢查,並從那裡開始向前檢查。
系統的錯誤信息中都包含一段文字,說明它所認定的錯誤原因。應該仔細閱讀這段文字,通常它提供了有關錯誤的重要線索。但也應該理解,錯誤信息未必准確,有時錯誤確實存在,但系統對錯誤的解釋也可能不對。也就是說,在查找錯誤時,既要重視系統提供的錯誤信息,又不應為系統的錯誤信息所束縛。
發現了問題,要想清楚錯誤的真正原因,然後再修改。不要蠻干。在這時的最大誘惑就是想趕快改,看看錯誤會不會消失。但是蠻乾的結果常常是原來的錯誤沒有弄好,又搞出了新的錯誤。
另一個值得注意的地方:程序中的一個語法錯誤常常導致編譯系統產生許多錯誤信息。如果你改正了程序中一個或幾個錯誤,下面的弄不清楚了,那麼就應該重新編譯。改正一處常常能消去許多錯誤信息行。
解決語法錯誤
常見語法錯誤:
1)缺少語句、聲明、定義結束的分號。
2)某種括弧不配對。C語言中括弧性質的東西很多,列舉如下:
( ), [ ], { }, ' ', " ", /* */
在不同位置的括弧不配對可能引起許多不同的錯誤信息。
3)關鍵字拼寫錯誤。
較難認定的典型錯誤:
1)宏定義造成的錯誤。這種東西不能在源程序文件中直接看到,是在宏替換之後出現的。常見的能引起語法錯誤的宏定義錯誤:宏定義中有不配對的括弧,宏定義最後加了不該有的分號,……
解決上下文關系錯誤
1)變數沒有定義。產生這個問題的原因除了變數確實沒有大意外,還可能是變數的拼寫錯誤,變數的作用域問題(在不能使用某個變數的地方想去用那個變數)。
2)變數重復定義。例如在同一個作用域里用同樣名字定義了兩個變數,函數的局部變數與參數重名等。
3)函數的重復定義。可能是用同一個名字定義了兩個不同的函數。或者是寫出的函數原型在類型上與該函數的定義不相符。有時沒有原型而直接寫函數調用也可能導致這種錯誤信息,因為編譯程序在遇到函數調用而沒有看到函數原型或函數定義時,將給函數假定一個默認原型。如果後來見到的函數定義與假定不符,就會報告函數重復定義錯誤。
4)變數類型與有關運算對運算對象或者函數對參數的要求不符。例如有些運算(如 %)要求整數參數,而你用的是某種浮點數。
5)有些類型之間不能互相轉換。例如你定義了一個結構變數,而後要用它給整數賦值。系統容許的轉換包括:數值類型之間的轉換,整數和指針之間的轉換,指針之間的轉換。其餘轉換(無論是隱含的,還是寫出強制)都不允許。參見《C語言程序設計》(K&R)197-199頁。
如何看待編譯警告
當編譯程序發現程序中某個地方有疑問,可能有問題時就會給出一個警告信息。警告信息可能意味著程序中隱含的大錯誤,也可能確實沒有問題。對於警告的正確處理方式應該是:盡可能地消除之。對於編譯程序給出的每個警告都應該仔細分析,看看是否真的有問題。只有那些確實無問題的警告才能放下不管。
注意:經驗表明,警告常常意味著嚴重的隱含錯誤。
常見警告:
1)(局部自動)變數沒有初始化就使用。如果對局部指針變數出現這種情況,後果不堪設想。對於一般局部自動變數,沒有初始化就使用它的值也不會是有意義的。
2)在條件語句或循環語句的條件中寫了賦值。大部分情況是誤將 == (等於判斷)寫成 = 了。這是很常見的程序錯誤,有些編譯程序對這種情況提出警告。
『玖』 關於vc中變數聲明語法上沒錯,為什麼編譯會出錯
這是編譯器的問題,很多編譯器在漢化的時候都出現許多bug漏洞,建議樓主安裝原版的英文編譯器,這樣編譯器的故障幾率會降低很多
『拾』 代碼沒有錯誤為什麼編譯不出來
編譯器是一種翻譯程序,它用於將源語言(即用某種程序設計語言寫成的)程序翻譯為目標語言(即用二進制數表示的偽機器代碼寫成的)程序。後者在windows操作系統平台下,其文件的擴展名通常為.obj。該文件通常還要經過進一步的連接,生成可執行文件(機器代碼寫成的程序,文件擴展名為.exe)。通常有兩種方式進行這種翻譯,一種是編譯,另一種是解釋。後者並不生成可執行文件,只是翻譯一條語句、執行一條語句。這兩種方式相編譯比解釋運行的速度要快得多。
2、 編譯過程的5個階段:詞法分析;語法分析;語義分析與中間代碼產生;優化;目標代碼生成。
3、 在這五個階段中,詞法分析的任務是識別源程序中的單詞是否有誤,編譯程序中實現這種功能的部分一般稱為詞法分析器。在編譯器中,詞法分析器通常僅作為語法分析程序的一個子程序以便在它需要單詞符號時調用。在這一編譯階段中發現的源程序錯誤,稱為詞法錯誤。
4、 語法分析階段的目的是識別出源程序的語法結構(即語句或句子)是否錯誤,所以有時又常為句子分析。編譯程序中負責這一功能的程序稱為語法分析器或語法分析程序。在這一階段中發現的錯誤稱為語法錯誤。
5、 C語言的(源)程序必須經過編譯才能生成目標代碼,再經過鏈接才能運行。PASCAL語言、FORTRAN語言的源程序也要經過這樣的過程。通常將C、PASCAL、FORTRAN這樣的語言統稱為高級語言。而將最終的可執行程序稱為機器語言程序。
6、 在編譯C語言程序的過程中,發現源程序中的一個標識符過長,超過了編譯程序允許的范圍,這個錯誤應在詞法分析階段發現,這種錯誤通常被稱作詞法錯誤。
詞法分析器的任務是以詞法規則為依據對輸入的源程序進行單詞及其屬性的識別,識別出一個個單詞符號。
詞法分析的輸入是源程序,輸出是一個個單詞的特殊符號,稱為Token(標記或符號)。
語法分析器的類型有:自下而上、自上而下。常用的語法分析器有:遞歸下降分析方法是一種自上而下分析方法, 算符優先分析法屬於自下而上分析方法,LR分析法屬於自下而上分析方法等等。
通常用正規文法或正規式來描述程序設計語言的詞法規則,而使用上下文無關文法來描述程序設計語言的語法規則。
語法分析階段中,處理的輸入數據是來自詞法分析階段的單詞符號。它們是詞法分析。