【问题标题】:Compiler says "Illegal Instruction" to a piece of simple code编译器对一段简单代码说“非法指令”
【发布时间】:2018-11-28 15:42:01
【问题描述】:

这只是检查数字是否为素数的简单代码,我不知道是编译器还是代码问题。 非常感谢您的帮助。

代码如下:

#include "stdio.h"
int main()
{
    int n,i,c=0;
    printf ("\n Enter a Number:");
    scanf ("%d",&n);
    for (i=1;i<=n;i++)
    {
         if (n%i==0)
         {
             c++;
         }
     }
     if (c==2)
     {
         printf ("\n Prime Number");
     }
     else
     {
         printf ("\n Not a Prime Number");
     }
     return 0;
}

【问题讨论】:

  • 叮当声?在哪条线上?
  • 编译器没有指定,很遗憾
  • 哪个编译器至少不会报告错误在哪一行?
  • 它是一个独立的Android编译器,它只是没有¯\_(ツ)_/¯
  • 能编译C代码吗? #include "stdio.h" 看起来很奇怪你只是复制粘贴标题还是为什么使用"" 而不是&lt;&gt;?还是预处理器要求这样做?

标签: c


【解决方案1】:

当你使用时

 #include "stdio.h"

您表示编译器应该在编译器已知的特定位置(通常是源文件目录,但它可能因编译器而异)中查找 stdio.h,非法指令可能是由于错误(糟糕的实现库)或者只是一个不存在的 stdio.h

这就是为什么编译器通常将其标准库放在自己已知的位置并使用

来引用
 #include <stdio.h>

由于您使用的编译器未提供详细信息,因此无法知道错误源自何处

编辑:您可以在增量步骤中测试您的代码,避免使用 printf 和 scanf,这可以通过使用测试变量和返回值来完成。正如我所说,由于非标准 stdio.h 实现,无法确切知道错误指令的生成位置,但我的猜测是 scanf 返回签名,这意味着不可编译的 for 循环。测试你的代码

【讨论】:

  • 我在编译器上做了很多编码,但从未见过这个错误,我什至尝试使用“”但无济于事。
  • 虽然使用`#include "stdio.h"`而不是`#include `是不寻常的,但这很可能不是这里的问题。
  • 问题与 c 无关,而与特定的编译器及其库实现有关。需要指出。
  • 我真的不知道这里有什么问题
猜你喜欢
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多