开发者社区> 问答> 正文

分解质因数问题,从控制台输入n,就会报错。为什么??报错

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MAX 1000
int a[MAX],b[MAX];//a用来存放质因子,b用来存放对应的指数;
void main()
{
// int n = 13824;//待分解的数;直接给n赋值,没有报错;
int n;
scanf("%d",&n);
    int temp = (int)(sqrt((double)n)+1); //报错位置;
int orignum = n;
int i;
int count = 0;
//scanf("请输入待分解的数:%d",&n);//从控制台输入n,就会报错。为什么?
    for(i=2;i<=temp;i++)
{
if(n%i==0)
{
a[++count] = i;
b[count] = 0;
   while(n%i==0)
{
++b[count];
n /=i;
}
}
}
if(n!=1)
{
a[++count] = n;
b[count] = 1;
}
printf("%d的质因数分解为:%d=",orignum,orignum);
for(i=1;i<=count;i++)
{
printf("%dexp(%d)",a[i],b[i]);
if(i<count)
   printf("
");
}
printf("\n");

system("pause");
}


展开
收起
爱吃鱼的程序员 2020-06-14 19:06:42 544 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    这个错误errorC2143:syntaxerror:missing';'before'type' 看着象中文;标点导致的。

    另外处理中文有宽字符对应的函数,比如wscanf对应scanf...

    http://www.cplusplus.com/reference/cwchar/wscanf/

    还有wprintf/ fgetws等等。正确显示还要OS的支持。而输出到文件,可能需要指定编码,类似这样:

    FILE*fout=fopen("out.txt","w,ccs=UTF-16LE");

    很多奇葩的细节...什么utf-8/utf-16/utf-32

    建议先用纯英文把程序调对,再考虑中文...

    根据你的建议,我再琢磨一会吧,像这种情况确实很奇葩。报什么错误?吧n打印出来看下回复 @sunny冰青:输入13824n已经有值了,temp也应该有值;为什么temp是一个随机值?-858993460的质因数分解为:-858993460=-858993460*exp(1)请按任意键继续...回复 @sunny冰青:scanf("%d",&n);//scanf("请输入待分解的数:%d",&n);inttemp=(int)(sqrt((double)n)+1);关键是这两条语句;E:\C语言学习\divfactor.c(16):errorC2143:syntaxerror:missing';'before'type'E:\C语言学习\divfactor.c(17):errorC2143:syntaxerror:missing';'before'type'

    怀疑有中文全角标点...

    建议任何时候都用纯英文系统开发,然后本地化成中文,这样不管中文/英文系统下都确保正确显示。

    见过太多在英文系统下乱码的程序了。

    跟这个没有关系,我重新敲一遍。只有在给n直接赋值的情况下,才不会报错。而,在定义n,通过scanf函数给n赋值时,就会报错。这个会不会和编译原理有关。

    scanf("请输入待分解的数:%d",&n);//从控制台输入n,就会报错。为什么?

    也是醉了

    今天哥们可是载了,妈的宵夜吃到一半赶回来修正,还是晚了一步。

    楼上说得对,scanf()用法错了,仔细看范例吧。

    http://www.cplusplus.com/reference/cstdio/scanf/

    变量要全部定义在函数的开头,之前不能有别的语句。

    C语言就是这么规定的。

    scanf语句违反了这种规定。

    //intn=13824;//待分解的数;直接给n赋值,没有报错;
    intn;
    scanf("%d",&n);
      inttemp=(int)(sqrt((double)n)+1); //报错位置;
    intorignum=n;
    inti;
    intcount=0;


    2020-06-14 19:07:01
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
DTS控制台一本通 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载