[英]Checking That Only Digits are Used in a Command-line Argument
我正在開發一個接受一個命令行參數的程序,我只希望它接受數字。 我希望它返回 1 並打印“Usage: ./caesar key”,如果有任何不是數字的東西,例如,如果用戶在命令行中輸入 20x 而不是 20。我已經為它創建了一個代碼,但發現即使命令行參數只包含數字,它也會返回 1 並打印“Usage: ./caesar key”。 有人對如何解決這個問題有一些建議嗎?
for (int i = 0, len = strlen(argv[1]); i < len; i++)
{
if (isdigit((char)argv[i]) == false)
{
printf("Usage: ./caesar key");
printf("\n");
return 1;
}
else
{
printf("success");
}
}
isdigit
的返回值是 integer 而不是 boolean,因此您可能無法獲得合適的比較結果。 在某些方面,返回值可以像 boolean 一樣使用,但不能用於直接值比較。 無論如何,您不需要在 C 中進行直接值比較,因此只需從您的代碼中刪除== false
並放一個!
在isdigit
面前是最好的。
如果您從argv[i]
中刪除了(char)
強制轉換,那么編譯器會告訴您您正在使用指針作為 integer 沒有強制轉換。 這是因為 argv 是一個指針數組(在使用中有點像二維數組,但有一些區別)。 當你只索引這個值一次時,你會得到一個指針,必須再次索引它才能獲得傳遞給 isdigit 的字符。 保持這一點的一種有用方法是在循環之前聲明一個設置為等於argv[1]
的const char *
變量,然后在循環中使用它,而不用擔心直接使用 argv 帶來的額外內容。
您沒有處理argv[1]
為""
或NULL
的情況(盡管您之前可能已經完成了NULL
測試)。
由於無論如何您都將遍歷字符串 (char[]),並且 strlen 必須遍歷字符串才能找到結尾,因此您可以更改整個循環而不知道它的邊界,只需檢查'\0'
然后進行isdigit
測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.