【问题标题】:Code supposed to check for non digits doesn't work in c [duplicate]应该检查非数字的代码在c中不起作用[重复]
【发布时间】:2020-08-13 13:55:49
【问题描述】:

我有这段代码应该检查“密钥”,即 argv(1),但它不工作。 “分段错误”

这里是:

string plain; //this is in advance for my for loop
              //was unable to find a way to actually get the thing to handle a non-numeric key :(

int main(int argc, string argv[])
{
  if (argc == 2 && isdigit(argv[1]))
  {
    plain = get_string("plaintext:");
    printf("ciphertext:");
  }
  else
  {
    printf("Usage : ./caesar key\n");
    return 1;
  }

感谢您的帮助,如果您需要更多详细信息,请询问!

【问题讨论】:

  • string plain;//这是我的for循环的提前这是我的get字符串
  • argv[1] 不返回整个字符串吗?该方法正在寻找代表单个字符的int...
  • 感谢 maarten 解决了问题

标签: c argv digits


【解决方案1】:

首先让我提一下,你所有的问题都是由 CS-50 引起的,这是一个可怕的有害类,会让你成为一个糟糕的 C 程序员。

实际上argv 的格式是char* argv[],一个字符指针数组。通过执行isdigit(argv[1]),您将char* 传递给函数,而不是预期的字符。在这里,一个标准的 C 编译器会抱怨“预期的字符,得到指针”,因为代码无效。

如果目的是检查字符串的第一个数字,你应该做isdigit(argv[1][0])。另请注意,isdigit 位于 ctype.h 中,因此您必须包含该标头。如果目的是检查字符串中的所有字符是否都是数字,则需要一个循环。

【讨论】:

    【解决方案2】:

    argv[1] 具有 char * 类型,而函数 isdigit 需要 char 类型的参数。所以这个 if 语句

    if (argc == 2 && isdigit(argv[1]))
    

    不正确。

    您需要编写一个单独的函数来检查表达式argv[1] 指向的字符串中的每个字符是否代表一个数字。或者您可以使用标准函数strtol 并检查该函数执行的字符串到整数的转换是否成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多