密码验证否则语句在不应该

时间:2015-05-21 16:46:24

标签: c if-statement for-else

我正在尝试在C中验证密码,并且每当代码运行时,我的else个语句之一就会自动触发。我运行一个测试来查看一个字符是否是一个符号,如果它是int symbol使用symbol++;加1,但问题是这个代码正在执行,无论我测试的字符是否是一个符号。

我认为这个问题与我的if, else语句的结构有关,而且我已经尝试了几种组合,但有些错误导致程序失效我使用了{{1}但这并没有帮助。这似乎应该是非常明显的,但我似乎无法弄清楚错误。

else if

3 个答案:

答案 0 :(得分:2)

在您的代码中,更改

for (i = 0; i <= len; i++) 

for (i = 0; i < len; i++) 

as,C数组具有基于0的索引。否则,你可能超越分配的内存,而内存又会调用undefined behaviour

注意:即使你没有超出内存(因为你有一个编译时分配的数组,输入可能小于实际的数组大小),你最终会比较终止{ {1}},这可能是你不想要的。

然后,nul检查不应该是独立的 isdigit()(根据您的逻辑),它应该是if else if

那就是说,

isalpha()

应该是

 scanf("%s", &password);

以避免任何可能的缓冲区溢出风险。

答案 1 :(得分:1)

该行

symbol++;

将在输入alpha时执行。

为防止这种情况发生,请在else测试之前插入isdigit

else if (isdigit(password[i])) {

其他人指出,循环也是错误的。它应该是

for (i = 0; i < len; i++) {

答案 2 :(得分:1)

您的代码如下所示:

if (cond1){}
if (cond2){}
else {}

在这种情况下,else - 块的执行独立于cond1 - 块,如C11标准草案第6.8.4.1节所述:$ 3:An else is associated with the lexically nearest preceding if that is allowed by the syntax.

您可以将代码的结构更改为:

if (cond1){}
else if (cond2){}
else {}