为什么我的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 */
}
我正在学习 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 */
}