我对编程非常新,所以请原谅我的无聊。我试图缩小下面函数中的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;
}
答案 0 :(得分:0)
我假设multiplier
是int
以匹配%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)
您不需要在这种情况下进行转换,因为转换是隐式完成的。你只需要一个强制转换来将变量的内容分配给不同类型的变量。