应该检查非数字的代码在c

问题描述

我有这段代码应该检查“ key”(即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;
  }

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

解决方法

让我首先提到您的所有问题都是由CS-50引起的,CS-50是一种可怕的,有害的类,它将使您成为不良的C程序员。

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

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

,

argv[1]的类型为char *,而函数isdigit的类型为char。所以这个if语句

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

不正确。

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