我剛剛安裝了 Visual Studio 代碼,在看了一些基礎知識之后,我撰寫了一個簡單的 C 代碼來計算矩形的面積。但是,當我運行代碼時,執行時間太長。我的系統配置是 4GB RAM,i3 - 第 5 代(可憐的 boi)這是代碼:
#include <stdio.h>
int main()
{
int l;
int b;
printf("enter the length of rectangle in an integer value");
scanf("%d ", &l);
printf("enter the breadth of rectangle in an integer value");
scanf("%d ", &b);
printf("the area of rectangle is %d", l * b);
return 0;
}
uj5u.com熱心網友回復:
更改scanf("%d ", &l);到scanf("%d", &l);和scanf("%d ", &b);到scanf("%d", &b);。
格式字串中的空格告訴scanf從輸入中讀取,直到讀取到非空白字符為止。因此,在 之后scanf("%d ", &l);,程式會繼續讀取輸入,直到您鍵入諸如下一個數字之類的內容。如果您確實輸入了下一個數字,則scanf("%d ", &b);讀取它,然后繼續讀取,直到它看到另一個不是空格的字符。只要您不鍵入任何內容,或者只鍵入空格和回車/回車鍵以及其他生成空格字符的鍵,程式就會繼續等待。
洗掉空格可以消除這種情況。
該計劃并不是“執行時間太長”。事實上,程式正在等待用戶輸入,所以它只是在等待,而不是執行。因為它沒有完成,所以你得出的結論是執行時間太長了。您應該報告觀察到的行為,而不是報告結論:鍵入輸入后,程式沒有可見的活動。
大多數scanf轉換都內置在執行轉換之前跳過空格,例如%d. 僅在格式字串中包含一個空格字符,您希望跳過通常不會跳過的空格,例如在%c轉換之前,它沒有內置自動跳過功能。
此外,在 中printf("the area of rectangle is %d", l * b);,在末尾添加一個換行符printf("the area of rectangle is %d\n", l * b);. (這樣可以保證程式執行完后命令列shell列印的提示在換行上,所以不會和程式輸出混淆。C被設計為以換行符結束輸出行,所以你應該把它變成一種常規做法。)
uj5u.com熱心網友回復:
好吧伙計們,我找到了解決方案。我要道歉的第一件事是代碼執行時間不會太長。代碼實際上正在執行,但沒有可見的活動。代碼中的一切都是完美的。我犯的錯誤是我沒有更改 VS Code 中的一項設定。我使用代碼運行器擴展來運行我的代碼 [這是最流行的]。我必須進入檔案 --> 首選項 --> 設定 --> 在搜索欄中鍵入“代碼運行器” --> 檢查此影像中給出的設定 - https://drive.google.com/file/d /1QwB2NjKpYX7M0b5w55sqy4oMVAOk_IK2/view?usp=sharing
很多人試圖找出代碼中的錯誤,但沒有任何問題。代碼運行器無法在終端中運行,因此沒有任何用戶輸入的活動 - 由于只讀文本編輯器。更改該設定后,我能夠直接在終端中提供用戶輸入。
解決方案的功勞 - https://www.youtube.com/watch?v=Si8rN5J249M
編輯:我的代碼中也有一個錯誤,哈哈,在另一個答案中提到了 - 非常感謝Eric Postpischil
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/380852.html
上一篇:磁盤盤片旋轉和磁盤臂運動
下一篇:Java快取請求元素集
