【问题标题】:If-statement wont execute! CS50 = PSet2if 语句不会执行! CS50 = PSet2
【发布时间】:2020-07-09 22:51:11
【问题描述】:

我对编程非常陌生(大约 4 周前开始正确),我目前正在在线学习 CS50 课程。我似乎在第 2 周的问题集上遇到了一些障碍 - “Caesar”,我的 if 语句根本没有执行。

现在,程序应该在在命令行中输入数字时启动,即“./caesar 10”(最终将通过我的“键”,但还没有来得及实现)。它应该请求对明文进行加密,并且目前只对明文中的每个字符 +1。

即使所有布尔表达式都为真,程序也不会执行 if 语句。我已经通过 cs50 IDE 中的 debug50 功能运行它,一切看起来都正确,即 argc 的值为 2,当我在命令行输入“10”时,k 的值为“10”。

这两天我一直在尝试解决这个问题 - 但无济于事!任何建议将不胜感激。我已经尽我所能来解释这个问题,但这对我来说是全新的,就像我之前所说的那样。

提前感谢您的任何/所有帮助! :)

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

int main(int argc, string argv[])
{
    int k = atoi(argv[1]);

    if (argc == 2 && isdigit(k))
    {
        string s = get_string("Plaintext: ");

        for(int i = 0, n = strlen(s); i < n; i++)
        {
            printf("Cipertext: %c", s[i] + 1);

            if (s[i] == ' ')
            {
                return 0;
            }

        }
    }

    else
    {
        printf("Usage: ./caesar key\n");

    }
}

【问题讨论】:

  • isdigit 用于处理字符。例如:isdigit('8');

标签: c if-statement cs50


【解决方案1】:

isdigit() 函数检查char 变量是否代表数字,即它的值是否在 48 到 57 之间(假设为 ASCII 编码)。你的 k 的价值是 10 - 什么不是数字(让我们先不管从 int 降级到 char)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多