初学者类型转换

时间:2013-12-27 00:57:05

标签: c graphics type-conversion mingw codeblocks

我对编程非常新,所以请原谅我的无聊。我试图缩小下面函数中的res [?]数组。我知道res [?] *(乘数/ 100)创建十进制答案而不是所需格式是一个整数的问题,因此我需要在将结果插入res [?]之前将其转换。

我确实想过将res []数组转换为double,但我不确定initwindow(?,?)是否与整数值兼容。

我正在使用代码块。链接器和编译器具有我教授的定制设置。我在Plain \ basic C ???

我尝试应用此网站用于截断转换的技术。但似乎没有用。 http://www.cs.tut.fi/~jkorpela/round.html 调试器观察器显示res [?]相当于0.

#include <stdio.h>
#include <graphics_lib.h>
#include <math.h>


int res[2]//contains a array which contains the vertical and horizontal detected resolution from main()
void function(res)
    {
    printf("Please note the lowest resolution available is 800x600\n");
    printf("Please enter percentage ratio % below 100:");
    scanf("%d",&multiplier);
    res[1]=(int)(res[1]*(multiplier/100));
    res[2]=(int)(res[2]*(multiplier/100));

    blah blah blah blah.............

    initwindow(res[1],res[2]) //from custom header that my professor made which initializes basic graphics window 
    return;
    }

4 个答案:

答案 0 :(得分:0)

我假设multiplierint以匹配%d格式。

multiplier/100保证为零(如果用户遵循指示并提供小于100的数字)。你可以做(res[x]*multiplier)/100以确保乘法首先发生(没有括号你可能没事,但不考虑操作顺序为什么不明确?)

转换为int是不必要的,因为int除以另一个int始终为int

除非你的教授做了一些非常有趣的事情,否则你应该注意到一个双元素数组如res会有元素res[0]res[1],而不是res[1]和{{ 1}}。

答案 1 :(得分:0)

看起来multiplier变量是int,因此multiplier/100表达式的结果在所有情况下都为0。

此外,检查用户输入的有效性是一种很好的编程习惯。

答案 2 :(得分:0)

您必须在使用前声明multiplier

int multiplier;
printf("Please note the lowest resolution available is 800x600\n");
printf("Please enter percentage ratio % below 100:");
scanf("%d",&multiplier);

索引从0开始不是1.你应该在使用之前初始化res[0]res[1]。所以:

res[0] = 800;
res[1] = 600;

乘数除以100将截断为0,尝试不进行转换,因为它会自动转换:

res[1]=(multiplier*res[0])/100;
res[1]=(multiplier*res[1])/100;

答案 3 :(得分:0)

您不需要在这种情况下进行转换,因为转换是隐式完成的。你只需要一个强制转换来将变量的内容分配给不同类型的变量。