为什么for循环第一个条件置空就会有错

FengHanWei 2013-10-27 05:06:19
#include<iostream>
using namespace std;
void chengfa(char* a,char* b){
int fuhao1,fuhao2;
char c[1000];
if(a[0]=='-'||a[0]=='+'){ //判断符号
if(a[0]=='-')fuhao1=-1;
else fuhao1=1;
strcpy(c,a+1);
strcpy(a,c);
}
if(b[0]=='-'||b[0]=='+'){//判断符号
if(b[0]=='-')fuhao2=-1;
else fuhao2=1;
strcpy(c,b+1);
strcpy(b,c);
}
int i=0;
int j=0;
for(i=0;i<1000;i++)//初始化C
c[i]='0';
i=strlen(a)-1;
j=strlen(b)-1;//获得长度
int lena=strlen(a);
int lenb=strlen(b);
for(i=lena-1;i>=0;i--){//就是去掉i=lena-1,j=lenb-1
int k=0;
for(j=lenb-1;j>=0;j--){
char l=c[i+j+1];
c[i+j+1]=(c[i+j+1]-'0'+(a[i]-'0')*(b[j]-'0')+k)%10+'0';
k=(l-'0'+(a[i]-'0')*(b[j]-'0')+k)/10;
}
if(k!=0)c[i]+=k;
}
i=0;
j=0;
while(c[i]=='0')i++;
while(i<=lena+lenb-1)
a[j++]=c[i++];
a[j] = '\0';//字符串以'\0'结尾
if(a[0] == '\0') a[0] = '0',a[1] = '\0';//如果只有空字符输出0
if(fuhao1*fuhao2 == -1 && a[0] !='0') {
strcpy(c,a);
a[0] = '-';
a[1] = '\0';
strcat(a,c);///连接字符串
}
}
void main(){
char a[1000];
char b[1000];
scanf("%s",&a);
scanf("%s",&b);
chengfa(a,b);
printf("%s",a);
}
...全文
803 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-10-28
  • 打赏
  • 举报
回复
for (A;B;C) D;
//等价于
{
 A;
 while (1) {
  if (!(B)) break;
  D;
  C;
 }
}
光流溢彩 2013-10-28
  • 打赏
  • 举报
回复
引用 10 楼 yyyangyy 的回复:
[quote=引用 7 楼 AnYidan 的回复:] [quote=引用 6 楼 AnYidan 的回复:] for循环第一个条件置空也要保证循环起始点是正确的
尤其是再次进入循环时[/quote] i=strlen(a)-1; j=strlen(b)-1; 这2个语句已经在for循环前声明了,也就是跟i=lena-1,j=lenb-1等价了吧。。那起始点应该正确吧?[/quote] 如果前面获取的值没有问题的话 ,,看上去 没有 错
yulitingfeng 2013-10-28
  • 打赏
  • 举报
回复
注意进入for循环时i的初始值。
AnYidan 2013-10-28
  • 打赏
  • 举报
回复
引用 10 楼 yyyangyy 的回复:
[quote=引用 7 楼 AnYidan 的回复:] [quote=引用 6 楼 AnYidan 的回复:] for循环第一个条件置空也要保证循环起始点是正确的
尤其是再次进入循环时[/quote] i=strlen(a)-1; j=strlen(b)-1; 这2个语句已经在for循环前声明了,也就是跟i=lena-1,j=lenb-1等价了吧。。那起始点应该正确吧?[/quote] 第二次进入内层循环哪?
SELF_IMPR小灰 2013-10-28
  • 打赏
  • 举报
回复
可以去掉,但是分号得加,不过可能结果就会有问题了,因为内层用到i和j
FengHanWei 2013-10-27
  • 打赏
  • 举报
回复
引用 7 楼 AnYidan 的回复:
[quote=引用 6 楼 AnYidan 的回复:] for循环第一个条件置空也要保证循环起始点是正确的
尤其是再次进入循环时[/quote] i=strlen(a)-1; j=strlen(b)-1; 这2个语句已经在for循环前声明了,也就是跟i=lena-1,j=lenb-1等价了吧。。那起始点应该正确吧?
worldy 2013-10-27
  • 打赏
  • 举报
回复
可以这样写 for(;;) //内容可以没有,但是分号一定要 { }
  • 打赏
  • 举报
回复
这是基本的语法规则,记住就行了
AnYidan 2013-10-27
  • 打赏
  • 举报
回复
引用 6 楼 AnYidan 的回复:
for循环第一个条件置空也要保证循环起始点是正确的
尤其是再次进入循环时
AnYidan 2013-10-27
  • 打赏
  • 举报
回复
for循环第一个条件置空也要保证循环起始点是正确的
zhaokai115 2013-10-27
  • 打赏
  • 举报
回复
可以去掉外层for里面的,内层的不行,因为j的值在第一次循环结束后已经变成-1了
FengHanWei 2013-10-27
  • 打赏
  • 举报
回复
就是可以运行,输入数据后计算有错误
FengHanWei 2013-10-27
  • 打赏
  • 举报
回复
去掉后运算有错误!!!!
碼上道 2013-10-27
  • 打赏
  • 举报
回复
去掉也得加个分号的。
前年 2013-10-27
  • 打赏
  • 举报
回复
要价格分号= = for(;i>=0;i--) {}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧