c - 预测号码

标签 c arrays pointers loops brute-force

我希望用户输入一个 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:

涉及 jk 的比较被错误地括起来:

&&(*(arr+1==j))&&(*(arr+2==k))

应该是

&&(*(arr+1)==j)&&(*(arr+2)==k)
          ^              ^

问题 3:

即使使用以上 2 个修复程序,您的程序仍将运行到无限循环,因为您的for 循环没有没有终止的条件。

因为你要求用户输入 4 位数字,你所有的循环应该从 09 为:

for(i=0;i<10;i++)
        ^^^^^

也为其他 3 个循环添加类似的检查。

关于c - 预测号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3911700/

相关文章:

c++ - 使用非扩展 -std 编译时,-Wpedantic 会做任何事情吗?

c - 迷宫死端过滤器检查

c# - 使用 SWIG 将错误值作为参数传递给 C 库

c - 显示 double 数组

c++ - 这是通过指针从 uint8_t vector 加载对象的安全方法吗?

c程序交换值打印错误结果

jquery - 拆分数组并将其放在每个数组的 IF 语句中

python - 使用模式阈值识别单词列表中的模式

c++ - DirectX:将数组指针传递给顶点结构

c - C中的外部函数修改结构体数组