【发布时间】:2019-10-07 07:30:48
【问题描述】:
我制作了一个简单的 c 程序,用于测试在一个简单的基于文本的 rpg 中输入经验点。它绝不是最终的,只是为了测试。它使用具有 6 个索引(0 到 5)的整数数组来存储 6 个不同的“级别”。这些“级别”根据用户输入的数字加 1。
它现在所做的只是提示输入整数,然后将该输入和数组传递给另一个函数。此函数使用 if/else if 结构来确定输入的数字是否在某个范围内,并根据该范围将特定数组索引的整数值增加 1。然后将数组传递回“main”。这是在一个while循环中,所以当我不输入-1时,循环会运行,每次都会传递输入的整数值和数组。
输入 -1 后,程序将调用另一个将数组传递给它的函数。最后一个函数使用 for 循环输出数组中每个索引位置的值。然后程序结束。
例如,如果我输入数字 5 六次,数字 15 输入十次,数字 35 输入一次,输出应该是这样的:
T O T A L S
Level 1 6
Level 2 10
Level 3 0
Level 4 1
Level 5 0
Level 6 0
我得到的是在输出中包含小数点,如下所示:
T O T A L S
Level 1 .6
Level 2 .10
Level 3 .0
Level 4 .1
Level 5 .0
Level 6 .0
为什么会发生这种情况,我应该怎么做才能摆脱它们?
代码:
#include <stdio.h>
int update_level(int points, int arr[]);
void display_levels(int arr[]);
int main(void)
{
int pointVal = 0;
int *proxy;
int pointArr[6] = {0, 0, 0, 0, 0, 0};
while (pointVal != -1)
{
printf("Player points (-1 to quit): ");
scanf("%d", &pointVal);
proxy = update_level(pointVal, pointArr);
}
display_levels(proxy);
return 0;
}
int update_level(int points, int arr[])
{
if (points >= 0 && points < 15)
{
arr[0]++;
}
else if (points >= 15 && points < 25)
{
arr[1]++;
}
else if (points >= 25 && points < 35)
{
arr[2]++;
}
else if (points >= 35 && points < 45)
{
arr[3]++;
}
else if (points >= 45 && points < 55)
{
arr[4]++;
}
else if (points >= 55)
{
arr[5]++;
}
return arr;
}
void display_levels(int arr[])
{
int level;
puts("\nT O T A L S\n");
for (int i = 0; i < 6; i++)
{
level = i + 1;
printf("Level %d%5c%d\n", level, "", arr[i]);
}
}
【问题讨论】:
-
我还应该补充一点,如果我删除 puts("\nT O T A L S\n");一行代码,小数点消失。同样,不知道为什么。
-
你的编译器没有收到关于最后一个 printf 的警告吗?如果没有,请尝试调整警告级别并详细查看它们。
-
你试过用
-Wall -Wextra编译吗?警告应该可以帮助您解决问题 -
一秒钟,我看看
-
是的。我正在使用 Dev C++,我收到以下警告:[Warning] assignment make pointer from integer without a cast and: [Warning] return makes integer from pointer without a cast