这是我的代码,没有任何for循环和条件:
int decryptedCode[3] = {0};
int encryptedCode[3] = {0};
printf("Enter a four digit code. i.e (1234): ");
scanf("%d%d%d%d", &decryptedCode[0], &decryptedCode[1], &decryptedCode[2], &decryptedCode[3]);
encryptedCode[0] = (decryptedCode[0] + 7); //Encrypting Code
encryptedCode[1] = (decryptedCode[1] + 7); //Encrypting Code
encryptedCode[2] = (decryptedCode[2] + 7); //Encrypting Code
encryptedCode[3] = (decryptedCode[3] + 7); //Encrypting Code
if ( encryptedCode[0] > 9 ) encryptedCode[0] = encryptedCode[0]%10;
if ( encryptedCode[1] > 9 ) encryptedCode[1] = encryptedCode[1]%10;
if ( encryptedCode[2] > 9 ) encryptedCode[2] = encryptedCode[2]%10;
if ( encryptedCode[3] > 9 ) encryptedCode[3] = encryptedCode[3]%10;
encryptedCode[0] ^= encryptedCode[2]; //swap values
encryptedCode[2] ^= encryptedCode[0]; //swap values
encryptedCode[0] ^= encryptedCode[2]; //swap values
encryptedCode[1] ^= encryptedCode[3]; //swap values
encryptedCode[3] ^= encryptedCode[1]; //swap values
encryptedCode[1] ^= encryptedCode[3]; //swap values
printf("Encrypted four digit code: %d%d%d%d", encryptedCode[0], encryptedCode[1], encryptedCode[2], encryptedCode[3]);
这里在下面的代码中我添加了for循环n if-else条件以使代码清理n效率:
int counter;
int decryptedCode[3] = {0};
int encryptedCode[3] = {0};
printf("Enter a four digit code. i.e (1234): ");
scanf("%d%d%d%d", &decryptedCode[0], &decryptedCode[1], &decryptedCode[2], &decryptedCode[3]);
for ( counter = 0; counter<= 3; counter++ ) {
encryptedCode[counter] = (decryptedCode[counter] + 7);
if ( encryptedCode[counter] > 9 ) {
encryptedCode[counter] = encryptedCode[counter]%10;
}
}
encryptedCode[0] ^= encryptedCode[2]; //swap values
encryptedCode[2] ^= encryptedCode[0]; //swap values
encryptedCode[0] ^= encryptedCode[2]; //swap values
encryptedCode[1] ^= encryptedCode[3]; //swap values
encryptedCode[3] ^= encryptedCode[1]; //swap values
encryptedCode[1] ^= encryptedCode[3]; //swap values
printf("Encrypted four digit code: %d%d%d%d", encryptedCode[0], encryptedCode[1], encryptedCode[2], encryptedCode[3]);
但它不起作用,我不知道为什么,我试图整天改变很多东西,但没有成功。
答案 0 :(得分:2)
您错误地声明了数组:您应该将它们更改为包含四个项目。
int decryptedCode[4] = {0};
int encryptedCode[4] = {0};
目前,您的代码具有未定义的行为。当你的循环“展开”时,编译器可以做一个不同的事情,这就是为什么这两段代码表现出不同的行为(尽管在两种情况下它都是未定义的,因为你引用了超过数组末尾的内存)。
答案 1 :(得分:1)
在C中,对于int a[n]
,数组索引从0
开始,到n-1
结束。要访问decryptedCode[3]
和encryptedCode[3]
,您必须将数组声明为
int decryptedCode[4] = {0};
int encryptedCode[4] = {0};
否则它会调用未定义的行为,你会得到任何东西,也可能是你的期望值(如果你是(非)幸运的话)。
在以下情况下,行为未定义:
......- 数组下标超出范围,即使某个对象显然可以使用 给定下标..