为什么我的bool函数需要"return true"才能正常工作?

Why does my bool function require "return true" to work normally?

我正在学习 CS50x 课程。而习题集2的作业是凯撒算法

我让它正常工作。但是有一件事让我感到困惑:

bool only_digits 函数 - 它需要最终的 return true 才能正常工作。我在 Google 上搜索,有人说必须有一个默认值 return,好吧,我明白了。

但是当我将它从 TRUE 切换为 FALSE 时,程序只是将所有命令行参数都视为 FALSE。因此程序无法运行。

我是算法和编程的新手。请帮助我理解这部分。

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

bool only_digits(string s);
char rotate(char c, int n);

int main(int argc, string argv[])
{
    // Make sure program was run with just one command-line argument
    // Also make sure every character in argv[1] is a digit
    if (argc < 2 || argc >2 || only_digits(argv[1]) == false)
    {
        printf("Usage: ./caesar key\n");
        return 1;
    }

    // Convert argument to int
    int x = atoi(argv[1]);

    // Prompt the user
    string plaintext = get_string("plaintext: ");

    // Encrypt the plaintext
    printf("ciphertext: ");
    for (int i = 0, len = strlen(plaintext); i < len; i++)
    {
        char cipher = rotate(plaintext[i], x);
        printf("%c", cipher);
    }
    printf("\n");
}

    // Function check if only digit
bool only_digits(string s)
{
    for (int i = 0, len = strlen(s); i < len; i++)
    {
        if (isdigit(s[i]))
        {
            while(s[i] == '[=11=]')
            return true;
        }
        else
        {
            return false;
        }
    }
return true; /* This part, I dont understand why */
}

    // Function rotate
char rotate(char c, int n)
{
    if (isalpha(c))
    {
        if (isupper(c))
        {
            c = 'A' + (c - 'A' + n) % 26;
            return c;
        }
        else c = 'a' + ((c - 'a' + n) % 26);
        return c;
    }
    else return c;
}

所以我将在这里讨论一个函数,带有 return true 的函数:

bool only_digits(string s)
{
    for (int i = 0, len = strlen(s); i < len; i++)
    {
        if (isdigit(s[i]))
        {
            while(s[i] == '[=10=]')
            return true;
        }
        else
        {
            return false;
        }
    }
return true; /* This part, I dont understand why */
}

所以你问 if (isdigit(s[i]) 然后你开始一个 while 循环,它在 s[i] != '[=14=]' 时终止,一旦你输入 if-body.

您要做的是检查您的字符串中是否有 non-digits。 像

bool only_digits(string s)
{
    for (int i = 0, len = strlen(s); i < len; i++)
    {
        if (!isdigit(s[i]))
           return false;
    }
    return true; /* if we didn't find a non-digit, we're fine */
}