2017-09-26 71 views
-2

我得到了很多人在这个程序wandering: 想不明白为什么,请帮助。 该项目工程,它显示的图形,我需要,但我得到了开头为这些警告被MOVETO地方和LineTo等 以下是完整的程序:通过'double'转换2`void moveto(int,int)'的警告

int main() 
{ 

    int Um=220, f=5, R=5; 
    double XL=10, XC=5, t, Im, Z, fi; // jaunie mainīgie 
    int s=1000, n=0; // jaunie mainīgie datu masīvam - s-max.izmērs, n-aktuāls datu skaits 
    double ue[s],it[s],ur[s],ul[s],uc[s]; //datu masīvi 

    Z=sqrt(R*R+pow(XL-XC,2)); //Z aprēķins 
    Im = Um/Z;     //Im aprēķins 
    fi = asin((XL-XC)/Z);  //fi aprēķins 

    //Ķēdes modelēšanas cikls 
    for (t=0;t<=2;t+=0.002) //cikls mainot t no 0 lidz 2 
    { 
    ue[n] = Um*sin(2*M_PI*f*t);   //ue (avota spriegums) datu ieraksts masīvā 
    it[n] = Im*sin(2*M_PI*f*t+fi);  //it (strāva) datu ieraksts masīvā 
    ur[n] = Im*R*sin(2*M_PI*f*t+fi); //ur (rez.spriegums) datu ieraksts masīvā 
    ul[n] = Im*XL*sin(2*M_PI*f*t+fi+M_PI/2); //ul (spol.spriegums) datu ieraksts masīvā 
    uc[n] = Im*XC*sin(2*M_PI*f*t+fi-M_PI/2); //uc (kond.spriegums) datu ieraksts masīvā 
    n++;  //mērījumu skaita palielināšana 
    } 

    for (int i=0; i<5; i++) 
     cout << "i = " << i << " " << ue[i] << " " << it[i] << " " << ur[i] << " " << ul[i] << " " << uc[i] << endl; 

    initwindow (1000,500,"Grafiks");  

    //Grafiku izvades cikls 
    for (int x=0; x<n-1; x++) 
    { 
     //ue grafika izvades komandas 
     setcolor(10);    //krāsa   
     moveto(x,50-ue[x]*0.1);  //kursora ievietošana 
     lineto(x+1,50-ue[x+1]*0.1); //līnijas zīmēšana 
     //ur grafika izvades komandas 
     setcolor(11); 
     moveto(x,150-ur[x]*0.1); 
     lineto(x+1,150-ur[x+1]*0.1); 
     //ul grafika izvades komandas 
     setcolor(12); 
     moveto(x,250-ul[x]*0.1); 
     lineto(x+1,250-ul[x+1]*0.1); 
     //uc grafika izvades komandas 
     setcolor(13); 
     moveto(x,350-uc[x]*0.1); 
     lineto(x+1,350-uc[x+1]*0.1);   
     //it 4 grafiku izvades cikls 
     for (int i=50; i<=350; i+=100) 
     { 
     //it grafika izvades komadas    
     setcolor(14); 
     moveto(x,i-it[x]); 
     lineto(x+1,i-it[x+1]);   
     }        
    } 
    while (!kbhit()); 
    closegraph(); 
} 
+3

什么是例如结果的类型'50-UE [X] * 0.1'?这不是“双”吗?你将这个参数作为参数传递给一个以'int'作为参数的函数。一个'int'不能处理'double'可以处理的值的范围,因此你会得到一个警告。 –

+0

如何编写一个能够再现问题的最小可编译示例? https://stackoverflow.com/help/mcve –

+0

你可以明确地转换为'int'来摆脱警告(假设它真的是你想要的代码)。 – Jarod42

回答

0

你传入double类型的参数,它接受一个函数参数类型为int。一个简单的例子是:

#include <iostream> 
void moveto(int x, int y){ 
    std::cout << x << ' ' << y << std::endl; 
} 
int main(){ 
    double a = 123.4, b = 567.8; 
    moveto(a, b); // decimal parts are cut off, warning issued 
} 

为了抑制编译器警告,你可以投双整数使用static_cast

moveto(static_cast<int>(a), static_cast<int>(b)); 

或探索这样的舍入功能std::round或修改功能,使它接受double类型的参数:

void moveto(double x, double y){ 
    std::cout << x << ' ' << y << std::endl; 
} 

铸造加倍到整数去除小数部分(无舍入发生),所以123.4变成123567.8变成567