首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

!C程序错在那

2012-04-11 
求助!!C程序错在那?/*2012年3月25日12:40:06;目的:设定一个初始的四位数,输入一个四位数与之比较;输出是几

求助!!C程序错在那?
/*
  2012年3月25日12:40:06;
目的:设定一个初始的四位数,输入一个四位数与之比较;
输出是几A几B,A表示数字相同且位置相同的位数总数,B表示表示数字相同但位置不同的位数总数;
*/
#include "stdio.h"
#include "math.h"

int main(void)
{
int answer[4]={2,3,5,2};
int guess;
int a,b,times=0;
int i,j;
printf("please guess:\n");

while(a!=4)
{
a = 0;
b = 0;
times++;
printf("%d ",times);
scanf("%d",&guess);
for (i=3;i>-1;i--)
{
for (j=0;j<4;j++)
{
if (guess/pow(10,i)==answer[j])
{if (i+j==3)
a+=1;
else 
b+=1;
}

}
guess = guess-(guess/pow(10,i))*pow(10,i);
}

printf(" %dA%dB\n",a,b);
}

  return 0;
}




  无论输入什么,为什么在VC++里的输出结果都是0A0B呢?

[解决办法]
感觉你的算法有问题,可能是我没看懂吧
if (guess/pow(10,i)==answer[j]) 强制转换成int if (int (guess/pow(10,i))==answer[j]) 

这是用输入的数每个位数跟答案对比的吧,但是i=2的时候guess/pow的结果是两位数吧... i=1的时候是三位数

这里应该就出问题了吧
[解决办法]

探讨

guess/pow(10,i)是float型

[解决办法]
/*
2012年3月25日12:40:06;
 目的:设定一个初始的四位数,输入一个四位数与之比较;
 输出是几A几B,A表示数字相同且位置相同的位数总数,B表示表示数字相同但位置不同的位数总数;
*/

#include "stdio.h"
#include "math.h"

int main(void)
{
 int answer[4]={2,3,5,2};
 int guess;
 int a,b,times=0;
 int i,j;
 printf("please guess:\n");

 while(a!=4)
 {
 a = 0;
 b = 0;
 times++;
 printf("%d :",times);
 scanf("%d",&guess);
 for (i=3;i>-1;i--)
 {
for (j=0;j<4;j++)
 {
 if (guess/(int)pow(10,i)==answer[j]) //将pow()强制转换成int型
 { 
if (i+j==3)
a+=1;
else
b+=1;
 
 }

 }
 guess = guess-(guess/(int)pow(10,i))*(int)pow(10,i); ////将pow()强制转换成int型
 }
printf(" %dA%dB\n",a,b);

 }
 
return 0;
}
虽然又是警告也可以运行,但是最好不要忽略,如果你没有做好适当的强制转换而是让系统自己转换的话会有警告D:\c++\Accelebrate\2012.03.25.01.cpp(39) : warning C4244: '=' : conversion from 'double' to 'int', possible loss of data,改一下就好了

热点排行