“如何在C中修复错误的加密程序”

时间:2019-04-27 05:49:56

标签: c

我目前正在研究密码学程序。它允许用户使用两种方法:凯撒密码和字母替换密码。

我已经为上述两种方法编写了函数。一个函数加密,一个函数解密(针对每种方法)。这些功能可以很好地隔离工作。

但是,我需要创建一个使用两种加密方法的程序。因此,我编写了一个程序,尝试在switch case语句中使用这两种方法(函数)。我不确定如何使用函数准确地实现switch case语句,但是我已经尽力了。

程序可以正确执行并执行,但是会产生一些错误的输出。在初始显示中,提示用户从菜单中选择适合其使用的方法。一旦做出选择,该特定方法的操作就会出错。

例如,如果用户选择“要使用带有密钥的旋转密码来加密消息,请输入1”,那么他们将被定向到“请输入要加密的消息:”,并且立即,甚至无法编写消息,程序显示“请输入密钥:”。这是我非常烦人的问题,它与菜单中的每个选项有关。为什么会这样呢?

我无法显示程序的完整代码,因为它很长。但是,我将展示这个问题的关键部分。我排除了这些功能,因为它们可以正常工作,并且我认为它们不是问题。我认为问题出在切换案例声明中。但仅作记录,有七个功能。 其操作如下:

这些功能用于旋转密码(每个功能都有不同的版本用于加密和解密): 1.一次加密一个字母,同时考虑小写和大写。 2.加密消息,包括对消息的每个字母进行加密(使用功能1)。

这些功能用于替换密码(每个功能都有不同的版本用于加密和解密): 3.获取文本中每个字母的密码索引。 4.解密输入的文本

任何形式的帮助将不胜感激。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为您没有清除输入缓冲区,并且在选择选项后击中的回车键停留在缓冲区中,即scanf找到它的那一刻,scanf将其加载到文本中。 尝试

 printf("Please enter message to be encrypted:\n");
 scanf("%s", text);

如果您打算在文本中包含空格[100],请尝试

 printf("Please enter message to be encrypted:\n");
 while (getchar()!='\n');
 fgets(text, 99, stdin);//or even this->scanf("%[^\n]s", text);