[英]Reading command-line argument in C and checking is it a digit
關於我的目標的詳細信息
在 C 中,我的程序應該從命令行獲取輸入,讀取它,確保它是一個數字,然后如果為真則打印出“成功”,如果為假則打印出“用法:./凱撒密鑰”。
預期成績
./caesar 33
Success
或者
./caesar zzz
Usage: ./caesar key
實際結果
./caesar 33
Segmentation error
我試過的
int main (int argc, string argv[])
{
if (argc == 2)
{
if (isdigit(argv[1]))
{
printf("Success\n");
return 0;
}
或者
if (argc == 2)
{
if (isdigit(argv[0][1]))
{
printf("Success\n");
return 0;
}
或者
int main (int argc, string argv[])
{
if (argc == 2 && isdigit(argv[1]))
{
printf("Success\n");
return 0;
}
你在這里做錯的是你想檢查整個字符串是否由數字組成,但是你將字符串本身傳遞給isdigit
,它需要一個char
。 您可以做的是手動遍歷char
數組並檢查每個char
是否為數字,或者您可以使用strspn
函數,如下所示。
strspn(argv[1], "0123456789") == strlen(argv[1])
這將比較參數中數字的跨度,如果它與字符串本身的長度相同,則返回 true。 如果您想在參數中允許 + 和 - 符號,請在strspn
使用"-+0123456789"
,盡管這會導致+++++
情況出現誤報(如下面@dreamcrash 所述),這就是為什么定義自定義函數總是更好的選擇。 strspn
和strlen
函數都在string.h
頭文件中可用。
如果您不需要使用isdigit
函數,那么您可以使用 @Param Siddharth 建議的strspn函數。 但是,它們是使用的幾種極端情況
if (strspn(string, "-+0123456789") == strlen(string))
例如,像"-----"
這樣的值將被視為有效數字。
如果你想使用isdigit
函數,那么你需要遍歷String中的所有char
(而不是一次性傳遞整個String )並檢查它們中的每一個是否確實是一個數字:
...
int i, is_number = 1;
for (i = 0; is_number && argv[1][i] != '\0'; i++){
if(i == 0 && (argv[1][i] == '-' || argv[1][i] == '+')){
continue;
}
is_number = isdigit(string[i]);
}
// It should fail for Strings that are : empty, only "-" or "+"
if(i == 0 || (i == 1 && !isdigit(argv[1][0])) || !is_number){
printf("The String is not a Number \n");
return 1;
}
printf("Success\n");
return 0;
}
我用輸入進行了測試:
int main (int argc, string argv[])
C 中未定義string
數據類型。第二個參數應為char* argv[]
。
請查看答案: https : //stackoverflow.com/questions/14709323/does-c-have-a-string-type# :~: text=There%20is%20no%20string%20type,one%20additional%20zero% 20 終止%20個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.