2013-05-04 48 views
-1

我用geany編譯我的代碼,沒有發現錯誤。 但是,當我運行.exe文件程序停止工作,我不是一個好的程序員,這是一個學校的工作。C - 運行我編譯的.exe文件時出錯

我的程序包括讀取2個單詞,換句話說,它將計算每個單詞有多少個字母,然後他將單詞A中的字母數量除以單詞B中的字母數量。

這是我的代碼

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    int i, j; 
    float n; 

    printf ("Insert first word:\n"); 

    for(i=0; argv[1][i] != '\0'; i++); 

    printf ("Insert second word:\n"); 

    for(j=0; argv[2][j] != '\0'; j++); 

    n=i/j; 

    printf("%.4f", n); 

    return 0; 
} 
+1

你是否將這些詞作爲參數傳遞 – user1937198 2013-05-04 13:17:09

+0

你應該縮進你的代碼,並粘貼它,而不是複製它。由於「Int」不是定義的類型,因此它不能編譯。 – 2013-05-04 13:19:07

+0

在第一個'printf'之前,你應該插入:'if(argc <3){printf(「Usage:%s \ n」,argv [0]);出口(-1); }' – mah 2013-05-04 13:24:36

回答

2

在這一行

n = i/j; 

您正在執行整數除法。例如,假設i爲3,j爲5,則執行3/5,其等於0

但我認爲你正在尋找執行3.0/5.0並希望答案0.6。所以你需要執行浮點除法。您可以通過將其中一個操作數強制轉換爲浮點數來強制執行該操作。

n = (float)i/j; 

在這個問題你寫Int而非int。提出這個問題時,我認爲這是一個抄寫錯誤。但是也許你的真實代碼看起來像這樣。在這種情況下,您需要將其更改爲int以便進行編譯。

您遇到的另一個可能的問題是程序需要在命令行上傳遞參數。你是否將兩個參數傳遞給你的程序?換句話說,你需要執行這樣的程序:

program.exe firstword secondword 

如果不傳遞參數,那麼你將嘗試訪問argv[]不存在的參數時遇到運行時錯誤。至少你應該添加一個檢查程序來確保argc==3

如果要讀取來自stdin的輸入,而不是傳遞命令行參數,請使用scanf

+0

+1。 'Int'應該是'int'。也許值得一提的是,其他變量將被隱式轉換。 – Maroun 2013-05-04 13:17:18

+0

運行程序時仍然給我一個錯誤 – LatK 2013-05-04 13:19:34

+0

@MarounMaroun顯然在真實的代碼中,否則編譯器會反對。 – 2013-05-04 13:19:42

1

我認爲這是一個概念錯誤。當這樣調用你的計劃(可能)運行良好:

myapp word1 word2 

但我認爲你希望它是這樣工作的:

myapp 
Insert first word: 
> word1 
Insert second word: 
> word2 

但是,這並不是什麼argv左右。你應該看看scanf

具體來說,第二種情況的錯誤是因爲argv[1]爲NULL,所以argv[1][i]是一個錯誤的內存訪問。