#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");
}
这个错误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;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。