首页 > 解决方案 > 在 C 中读取命令行参数并检查它是否为数字

问题描述

关于我的目标的详细信息

在 C 语言中,我的程序应该从命令行获取输入,读取它,确保它是一个数字,如果为真,则打印出“成功”,如果为假,则打印出“用法:./caesar key”。

预期成绩

./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;
   }

标签: arraysccommand-line-argumentscs50

解决方案


你在这里做错的是你想检查整个字符串是否由数字组成,但是你将字符串本身传递给isdigit,它需要一个char. 您可以做的是手动遍历char数组并检查每个char是否是数字,或者您可以使用strspn如下所示的函数。

strspn(argv[1], "0123456789") == strlen(argv[1])

这将比较参数中数字的跨度,如果它与字符串本身的长度相同,则返回 true。如果您想在参数中允许 + 和 - 符号,请使用"-+0123456789"inside strspn,尽管这会导致类似情况的误报+++++(如下面的@dreamcrash 所述),这就是为什么定义自定义函数始终是更好的选择。strspn和函数都strlenstring.h标题中可用。


推荐阅读