如何解决应该检查非数字的代码在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
并检查该函数执行的字符串到整数的转换是否成功。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。