我需要更改什么以便 cs50 Caesar 在我遍历每个字符后只打印正确的消息?

What do I need to change so cs50 Caesar only prints the correct message after i iterate over each character?

我无法尝试遍历每个字符来检测它是否是数字,同时只打印一次答案。我遇到的问题是我可以让它检测一个字符是否是数字,但它会为我输入的每个数字打印出一个答案,直到它到达一个字母。我正在寻找如何让它检测输入是数字还是字母,然后决定打印什么而不是每次检测到数字时都打印成功。感觉它与我的 for 循环有关,但无法完全弄清楚。谢谢

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

int main(int argc, string argv[])
{    
    string n = argv[1];
    if (argc != 2)
    {
        printf("usage: ./caesar key\n");
        return 1;
    }
    else
    {
        for(int i = 0, length = strlen(n); i < length; i++)
            if(!isdigit(n[i]))
            {
                printf("usage: ./caesar key\n");
                return 1;
            }
            else
            {
                int convert = atoi(n);
                printf("Success\n");
                printf("%i\n", convert);
            }
    }
}


问题是在 for 内部有一个 if-else 语句...这意味着两者之一将始终在每次迭代中执行。 为了只打印一次成功,您应该删除 else 关键字(为了清楚起见,删除括号)但保留 else 代码。

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

int main(int argc, string argv[])
{    
    string n = argv[1];
    if (argc != 2)
    {
        printf("usage: ./caesar key\n");
        return 1;
    }
    else
    {
        for(int i = 0, length = strlen(n); i < length; i++)
        {
            if(!isdigit(n[i]))
            {
                printf("usage: ./caesar key\n");
                return 1;
            }         
        }
        int convert = atoi(n);
        printf("Success\n");
        printf("%i\n", convert);   
    }
}

What do I need to change so cs50 Caesar only prints the correct message after i iterate over each character?

您似乎没有意识到您不必这样做。 Caesar Specification 表示:

  • 您可以假设,如果用户确实提供了命令行参数,它将是一个非负整数(例如,1)。无需检查它是否确实是数字。