问题标签 [cs50]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
11373 浏览

c - cs50 中的 Vigenere 密码

我正在通过在线课程教我如何编码。我对此很陌生,并且一直在慢慢地完成这门课。我遇到了 vingenere 密码的问题。它不会在整个输入中迭代密钥。

编辑:键应该遍历用户输入,当它到达键的末尾时,循环回来并重新开始。该键还应跳过任何特殊字符(!@#“”等)

我知道字符串不正常,但它包含在标题中以帮助新生。我想随着课程的进展我们会学到更多。

0 投票
3 回答
124 浏览

c - 为什么这会导致分段错误?

我正在对链表进行练习。当我在列表开头输入值并且值小于列表中的值时,它会起作用。但是当数字更大时,我会遇到分段错误。有人想下面的代码有什么问题吗?

//标题(称为headeroef):

//其他代码

0 投票
2 回答
3469 浏览

c - CS 50- Pset 1 马里奥程序

问题集要求我们使用哈希创建一个半金字塔。这是一个链接到它应该如何看待的图像 -

在此处输入图像描述

我明白了这个想法并编写了程序,直到打印空格(我已将其替换为“_”,以便我可以测试它的前半部分。

但是,当我尝试运行我的程序时,它并没有超出 do-while 循环。换句话说,它一直问我金字塔的高度,似乎根本没有运行 for 循环。我尝试了多种方法,但这个问题似乎仍然存在。

任何帮助,将不胜感激!

下面是我的代码-

运行此程序会产生以下输出 -

0 投票
2 回答
1280 浏览

c - 凯撒密码:正确加密但输出缺少空格和标点符号

从昨天开始,我一直在研究这个问题,经过一番努力,我成功地加密了消息。但是,我的输出缺少空格。

据我了解,发生这种情况的原因是因为我正在使用 isalpha()、isupper() 和 islower() 命令,因此忽略了原始输入中的空格。

有人可以帮助我如何保留原始空格和标点符号吗?

下面是我的代码——它远非优雅,任何关于风格的评论也将不胜感激!

(此外,虽然有很多关于 Caesar Cipher 的问题,但没有一个可以解决这个问题。由于这是我的第一周编程,我很难理解其中的语法。)

我的算法中有一个明显的错误,如果给定某些参数,它会导致它输出错误的值。例如 ak 为 13,在第 13 个字母(我认为是 m)之后输入任何东西都会输出一些非常奇怪的东西。我会修改这个并很快回来!在那之前,对我的代码持保留态度!

更正的代码,工作正常:SPOILERS AHEAD

0 投票
3 回答
970 浏览

c - 命令行参数分段错误(核心转储)

我知道分段错误意味着我正在尝试使用我不应该触摸的内存,但我无法弄清楚它在我的代码中来自哪里。我为一个作业编写了一个程序,该程序使用 vigenere 的密码来加密一些纯文本。它编译得很好,但是当我使用命令行参数运行它时,我得到一个分段错误。

0 投票
1 回答
328 浏览

c - C中的Vignere Cipher:空间未被忽略

Vignere 密码的一般解释:

Vignere 密码是一种类似于凯撒密码的加密方法。此 Cipher 将一个单词作为参数,并将单词的字母解释如下 - a 为 0,b 为 1,c 为 2,依此类推。

因此,如果您的输入密钥是“abc”并且您想要加密“hi hello”之类的内容,则输出将需要 h 保持不变,i 移动 1 位,h 移动 2 位,e 再次保持相同(如它被移动 0),l 移动 1 位,另一个 l 移动 2,依此类推。

基本思想是每个字母在参数中移动相应的字母,空格和其他标点符号被忽略。如果参数比消息短(在大多数情况下),参数只是围绕消息循环。


我的问题:

唯一存在的问题是它似乎只是为句子的第一个单词做正确的事情。它没有忽略空格。

我在下面粘贴了我的新代码。

例如,对于程序./vigenere bacon和消息Meet me at the park at eleven am,我希望Negh zf av huf pcfx bt gzrwep oz作为输出。但是,我得到的是Negh ne og tjs qaty bt svfvgb bm. 或者例如,当我在 上运行程序./vignere bcABCD ABCD,我会期望BDDF BDDF. 相反,我得到的是BDDF CCEE(当它应用类似于bcbcbcbcb而不是bcbc bcbc.

虽然第一个单词正在正确更改,但它似乎正在加密整个句子,而它应该只加密字母 - 我已经使用 isalpha 命令指定了这一点。

这就是为什么它看起来有点令人费解。

代码:

注意:这实际上是 C 而不是 C++,并且 GetInt() 和 GetString() 等一些命令在我正在使用的 CS50 库中可用。

0 投票
0 回答
157 浏览

c - C 语言中的 Vigenere 密码:不完全加密

Vigenere 密码的一般解释:

Vigenere Cipher 是一种类似于 Caesar Cipher 的加密方法。此 Cipher 将一个单词作为参数,并将单词的字母解释如下 - a 为 0,b 为 1,c 为 2,依此类推。

因此,如果您的输入密钥是 abc 并且您想要加密“hi hello”之类的内容,则输出将需要 h 保持不变,i 移动 1 位,h 移动 2 位,e 再次保持不变(因为它是被移动 0),l 移动 1 位,另一个 l 移动 2,依此类推。

基本思想是每个字母在参数中移动相应的字母,空格和其他标点符号被忽略。如果参数比消息短(在大多数情况下),参数只是围绕消息循环。


我的问题:

我的信息刚刚被 Vignere Cipher 的第一个字母加密。

例如,./vc bc---->message: ABCDE ABCDE变为BCDEF BCDEF。换句话说,整个消息只是被 b 的值移动,而它应该被 bc 的值移动(第一个字母+1,其他每个字母+2。)

尽管处于循环中,但我不明白为什么会发生这种情况。

代码:

0 投票
1 回答
1558 浏览

c - 需要从 do/while 和多个 while 循环中返回一个值 - C

我正在尝试构建一个简单的变化计算器。用户输入欠款金额,然后按回车键。他们输入的值应该先乘以 100(这样当我们四舍五入时,数字不会被截断)。四舍五入应该将浮点数转换为整数,然后应该执行所有数学运算(while 循环),最后打印出一个数字,表示给了多少硬币(即有多少四分之一,一角硬币,等等...)代码编译得很好,它提示用户输入一个值,但是当你按下回车键时,什么都没有执行,命令行回到空白。

任何想法我做错了什么?我的猜测是 while 循环中的值没有被转移出循环,因此它们可以在下一个循环中使用。但是我是 C 语言的早期初学者,并且不确定循环的正确规则。我尝试查找 while 循环示例,但没有真正解释如何将值从一个 while 循环传递到另一个循环。如果,事实上,这就是问题所在。谢谢你的帮助。

代码修订:

0 投票
1 回答
742 浏览

c - 为什么终端说“二进制表达式的无效操作数”?C

这是终端给出的错误:

从以下代码:

我想你对CS50的“贪婪”任务很熟悉。我需要得到剩余的x. 也许我在教程中遗漏了一些东西,但我认为他们没有指定如何使用模%运算符。

0 投票
3 回答
99 浏览

c - 如何在 C 中使用字符

我正在努力让 Char 工作。它不断返回错误。