关于创建函数类型布尔值的任何建议,该函数类型检查命令行参数是否实际上是数字?

问题描述 投票:0回答:1

好吧,我目前正在学习计算机科学的 cs50 入门课程。自从我开始这门课程以来,这是我问过任何人的第一个问题。我将尽我所能提出正确的问题并提供足够的细节。我非常接受建设性的批评,所以如果有人有任何意见,请不要犹豫。

好吧,我正在尝试创建一个类型为 bool 的函数,其参数字符串名为 only_digits(我希望我说的是正确的),它将检查用户输入的命令行参数是否实际上是一个数字。我认为我没有正确使用 isdigit。我想要完成的不仅是检查它是否是十进制数字,而且还将它返回到 main 以继续执行该程序,并将密钥从字符串转换为 main 中的 int。我已经为此苦苦挣扎了几天,并且尝试了很多不同的方法。我拒绝去看整个程序的其他解决方案,因为我真的很想了解这一点并能够学习和进步。就是《计算机科学导论》课程“第2周数组”中的“凯撒”密码“问题集2”

#include <cs50.h> 
#include <stdio.h>
#include <string.h>
#include <ctype.h>

bool only_digits(string s);

int main(int argc, string argv[])
{
   if(argc != 2)
   {
      printf("USAGE: ./caesar KEY\n");
      return 1;
   }
   return 0;
}

bool only_digits(string s)

if (! isdigit, (argv[1]))
{
   printf("INVAILD: USAGE: ./caesar KEY\n");
   return 1;
}
return 0;

现在,我已经尝试以多种不同的方式实现该功能。我试过了……

if ((isdigit, s) == 0)...if (!isdigit, argv[1])

但我知道我还没有为 argv[1] 声明 s,我也有问题。每次我尝试声明它时都会出错。我会列出更多我尝试过的例子和错误,但老实说,我尝试了很多不同的方法,现在我什至记不住所有的方法。它们在我的 github 中,但我相信如果您想查看我尝试将此功能实现到我的程序中的所有方法。我相信这些细节足以帮助您理解。如果实际上不是,请让我知道我可以改进的地方。我将不胜感激。我的 github 是 nikkimarie31 如果你需要看看我尝试过的其他选项。

另外,请告诉我这个假设是否错误。命令行参数存储为字符串,因此如果用户键入“./caesar 3”argv[“3”] 而不是 argv[3],则它以这种方式存储。所以这意味着它存储为一个字符串而不是十进制数 3。所以我实际上正在尝试检查它是否是一个字符串以及是否能够将它更改为一个 int。我不知道我是否完全理解这一点,这可能是我因为不理解这个概念而无法实现这个功能的一个重要原因。再次感谢

在提交之前,我检查了他们希望我审查的所有建议问题和答案,老实说,我只是浏览了一下,因为该程序的其他部分有解决方案,我不想不小心遇到并丢失一开始自己尝试的能力。实现功能的这个特定部分是我现在坚持的部分。提前感谢大家的帮助。非常感谢。谢谢你,祝你度过愉快的一周

function boolean command-line-arguments cs50 caesar-cipher
1个回答
0
投票

isdigit() 只检查一个“字符”(字符串的)。

//do not have this
//#include <cs50.h>
//
#include <stdbool.h> //included for bool
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h> // for exit()

#define string char* // emulate string as keyword

bool only_digits(string s);

int main(int argc, string argv[])
{
        if(argc != 2)
        {
                printf("USAGE: ./caesar KEY\n");
                return 1;
        }
        only_digits(argv[1]);

        return 0;
}

bool only_digits(string s) {
        int len = strlen(s);
        for (int x=0;x<len; x++)
        {
                if (!isdigit( (unsigned char) s[x] ))
                {
                        printf("INVAILD: USAGE: ./caesar KEY\n");
                        exit(1); // hard exit, or change it to return(1) to 'fail'
                }
        }
        return 0;
}


祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.