C:重新输入以输入值到argv [] - 没有错误关闭 - 凯撒密码

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

我是编程新手,我正在接受关于eDX的CS50哈佛课程。我们对caesar密码有分配,我对我的代码非常满意,尽管它并不完美。但是我不确定如何在不提供任何参数的情况下使程序no关闭错误。

根据课程设置,它应该是可能的,输出应该是“Usage:./ caesar key” - 如果我使用字符串而不是整数值或者插入了多个值,它是有效的。但是空值(./caesar)我在终端中收到错误。有没有办法如何避免这种情况,只是为了关闭程序,例如输入字符串?已检查过多个主题,但无法找到该怎么做。

谢谢

PS:已经提交了作业,但在我看来我仍然回到这个主题,并想知道它是否可能以及如何:D

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

int main(int argc, string argv[])
{
    int k = atoi(argv[1]);
    if (argc != 2 || argv[1] == NULL || k <= 0)
    {
        printf("Usage: ./caesar key\n");
        return(1);
    } 
    string p = get_string("Plaintext: ");
    printf("Ciphertext: ");

    //incrementing each letter
    for (int i = 0, n = strlen(p); i < n; i++)
    {
        //for capital letters
        if (p[i] >= 65 && p[i] <= 90)         
        {
            //refreshing alphabet char counting to 65
            if (p[i] + k > 90)
            {
                int m = ((p[i] + k) - 90);
                char c = 64 + m; 
                printf("%c", c);
            }
            else
            {
                printf("%c", p[i] + k);
            }
        }
        //for non-capital letters
        if (p[i] >= 97 && p[i] <= 122)         
        {
            //refreshing alphabet char counting to 97
            if (p[i] + k > 122)
            {
                int m = ((p[i] + k) - 122);
                char c = 96 + m; 
                printf("%c", c);
            }
            else
            {
                printf("%c", p[i] + k);
            }
        }
        //for non-letter characters
        if (p[i] < 65 || p[i] > 122)
        {
            printf("%c", p[i]);
        }
    }
    printf("\n");
}
c cs50 caesar-cipher
1个回答
3
投票

在开始访问argc之前,您需要检查argv的值。因此,不是设置k然后进行这些检查,而是进行大部分检查,然后分配k,然后检查k是合法值。

int k;
if (argc != 2 || argv[1] == NULL)
{
    printf("Usage: ./caesar key\n");
    return(1);
}
k = atoi(argv[1]);
if (k <= 0)
{
    printf("Usage: ./caesar key\n");
    return(1);
}
© www.soinside.com 2019 - 2024. All rights reserved.