我希望用户输入一个 4 位数字,程序必须告诉该 4 位数字是什么,即通过暴力攻击生成该 4 位数字。但是在下面提到的行中,编译器说间接寻址无效。我也会我想对他们的实现方式发表一些评论,这是一种好的做法吗?
#include<stdio.h>
void BruteForceAttack(int *arr);
int main()
{
int *arr,i;
printf("Enter 4 digits ,press enter after entring each digit:\n");
for(i=0;i<4;i++)
scanf("%d",arr+i);
BruteForceAttack(arr);
getchar();
return 0;
}
void BruteForceAttack(int *arr)
{
int i,j,k,l;
for(i=0;;i++)
{
for(j=0;;j++)
{
for(k=0;;k++)
{
for(l=0;;l++)
{
if((*(arr+0)==i)&&(*(arr+1==j))&&(*(arr+2==k))&&(*(arr+3)==l)) /*Here the compiler says invalid indirection*/
{
printf("The number is %d%d%d%d",i,j,k,l);
return;
}
}
}
}
}
}
最佳答案
共 3 个问题:
问题 1:
您的 arr
是一个悬挂指针,您正在 scanf
中取消引用它。
你需要:
int arr[4];
代替
int *arr;
问题 2:
涉及 j
和 k
的比较被错误地括起来:
&&(*(arr+1==j))&&(*(arr+2==k))
应该是
&&(*(arr+1)==j)&&(*(arr+2)==k)
^ ^
问题 3:
即使使用以上 2 个修复程序,您的程序仍将运行到无限循环,因为您的for
循环没有没有终止的条件。
因为你要求用户输入 4 位数字,你所有的循环应该从 0
到 9
为:
for(i=0;i<10;i++)
^^^^^
也为其他 3 个循环添加类似的检查。
关于c - 预测号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3911700/