【问题标题】:Beginner type conversion初学者类型转换
【发布时间】:2013-12-27 00:57:05
【问题描述】:

总的来说,我对编程非常陌生,所以请原谅我的笨拙。我正在尝试缩小下面函数中的 res[?] 数组。我知道 res[?]*(multiplier/100) 正在创建十进制答案而不是所需的整数格式的问题,因此我需要在将结果插入 res[?] 之前对其进行转换。

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

我正在使用代码块进行 mingw。链接器和编译器具有我的教授进行的自定义设置。我在平原\基本C???

我尝试应用该网站用于截断转换的技术。但似乎不起作用。 http://www.cs.tut.fi/~jkorpela/round.html Debugger watcher 显示 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;
    }

【问题讨论】:

  • 您遇到了什么问题?
  • 先尝试一些更简单的方法来验证您的基本假设和概念。

标签: c graphics type-conversion mingw codeblocks


【解决方案1】:

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

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

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

除非您的教授做了一些非常有趣的事情,否则您还应该注意,像 res 这样的二元素数组将包含元素 res[0]res[1],而不是 res[1]res[2]

【讨论】:

  • 非常感谢。让我从 1 小时的代码和互联网疯狂搜索中解脱出来。而且我从没想过乘数会变为零。而且即使我不小心使用了错误的数组编号,该数组还是可以正常工作。我猜如果我将乘数更改为浮点类型,我的初始代码会起作用。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      使用前必须声明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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多