我尝试了一次(非常糟糕)破解。
这是代码:
#include <stdio.h>
#include <string.h>
int main()
{
char passphrase[20];
printf("Welcome to first_level.\n");
printf("Hello. What's your passphrase?\n");
fgets(passphrase,20,stdin);
passphrase[strcspn(passphrase, "\n")] = 0;
if(strlen(passphrase) != 10){
// you lost
} else
{
int counter = 0;
for(int i = 0; i < 10; i++)
{
char index = i;
char currentChar = passphrase[i];
//printf(passphrase[i]);
printf("---\nindex: %d\nchar: %c\n",index, currentChar);
if(index == currentChar){
//printf("ass\n");
counter++;
}
}
if(counter == 10)
{
printf("Congrats!\n");
return 0;
}
printf("counter %d\n", counter);
}
printf("You lost!\n");
return 0;
}
现在从理论上讲,字符比较应该起作用。不幸的是,我相信这些字符会被转换为int,然后进行比较。
在比较之前使用神奇的printf,我注意到如果我打印数字(%d),则char将为> 48,而在打印字符(%c-如所提供的代码)时,字符号为正确打印。
我想知道我该怎么做?我已经尝试过strcmp
,但显然它期望使用字符串而不是char。
答案 0 :(得分:2)
C标准要求字符'0'
,'1'
,...和'9'
必须是连续的和连续的。因此我们知道'1'
的值比'0'
的值大1(其他数字类似)。
考虑到以上情况,我们知道
'0' - '0' == 0;
'1' - '0' == 1;
....
'9' - '0' == 9;
请注意,无论在基于ASCII的计算机,EBCDIC或Klingon或其他任何设备上运行,上述所有必须都必须工作。
因此,要将字符形式('0'
,...,'9'
)的数字与整数值(0
,...,9
)进行比较,只需减去'0'
来自字符。
if (index == currentChar - '0') /* ... */;