关于c的printf和c++的cout输出有关问题

关于c的printf和c++的cout输出问题
关于判断浮点数X和1/2+1/3+1/4+1/5.....+1/n的累加中分数的个数问题


程序如下:
#include <iostream>
using namespace std;
int main()
{
  double data=0;
  double x;
  double i;

  while(cin>>x)
{
if(x==0.00){break;}
else if(x>=0.01&&x<=5.20)
{
  for(i=2;data<=x;i++)
  {
  data=data+1/i;
  }
   
  cout << i-2 << " card(s)" << endl;
 
data=0;
}
}
  return 0;
}

在这个程序里,输出的是个整数i-2(如:1 2 3 4)

当我把cout << i-2 << " card(s)" << endl;语句
换为printf("%lf card(s)",i);后

输出的是小数i-2(如1.00000 2.00000 3.00000)

想请教一下各位大神这其中的原因。

还有一个问题是:

当我把i换成int类的时候,不管用cout还是printf都不能输出结果,为什么呢?

------解决方案--------------------
当我把i换成int类的时候,不管用cout还是printf都不能输出结果,为什么呢?
1/i是0

cout << (double)(i-2) << " card(s)" << endl;
------解决方案--------------------
第一个问题:
当我把cout << i-2 << " card(s)" << endl;语句
换为printf("%lf card(s)",i);后
输出的是小数i-2(如1.00000 2.00000 3.00000)

因为printf("%lf card(s)",i);中的%1f,f表示输出浮点数,%d或者%i表示输出int,具体如下:

%c character 
%d signed integers 
%i signed integers 
%e scientific notation, with a lowercase "e" 
%E scientific notation, with a uppercase "E" 
%f floating point 
%g use %e or %f, whichever is shorter 
%G use %E or %f, whichever is shorter 
%o octal 
%s a string of characters 
%u unsigned integer 
%x unsigned hexadecimal, with lowercase letters 
%X unsigned hexadecimal, with uppercase letters 
%p a pointer 
%n the argument shall be a pointer to an integer into which is placed the number of characters written so far 
%% a '%' sign 


第二个问题:
i改为int的时候,输出结果一直是0,因为1/i=0,
如果1/(float)i就可以,体会一下
------解决方案--------------------
cout,你可以理解为,有什么东西就输出什么,有小数就输出小数,没小数就不输出。
printf的话,要你自己来设定输出的是什么类型,所以有%F或者%d一说

你的程序里面要计算的东西,就是很多分数去相加,但是你把i变成int类型以后,data+1/i,1/i=0,那你每次都是加0,如果1除于浮点数--FLOAT或者DOUBLE,结果就不是0了。

我建议,你马上学调试,一步一步自己调试,才能更快的入门