c - C 程序的输出中出现无法解释的字符
问题描述
我制作了一个简单的 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]);
}
}
解决方案
在 functiondisplay_levels
中,您试图打印一个字符,"%5c"
但给出一个字符串文字""
作为参数,这会导致 UB(未定义的行为),这是一个充满惊喜的潘多拉盒子。
您应该将参数替换' '
为预期结果。
printf("Level %d%5c%d\n", level, ' ', arr[i]);
/* ^^^ */
或者,您可以替换"%5c"
为"%5s"
.
推荐阅读
- css - How to identify the navbar colour in CSS
- python - python - 如何从python列表中的索引中打印某个元素之前的2个元素?
- jersey - 如何在 grizzly 服务器控制台上获取 HTTP 请求日志?
- java - Apache poi:只要在段落中插入运行,XWPFFieldRun 就会在段落前面移动
- angular - 数据源更新时保持展开的 mat-table 不会折叠行(Angular Material)
- php - 如何在 AND 条件内创建 Opencart mysql 查询
- visual-c++ - CMake Warning (dev) in CMakeLists.txt: No cmake_minimum_required command is present. A line of code such as cmake_minimum_required(VERSION 3.9)
- react-native - 如何在不使用任何第三方软件的情况下在我的 react-native 应用程序中打开文档和视频文件?
- apache - 使用正在运行的 mod-mono-server 应用程序停止 apache 需要几分钟
- ruby-on-rails - 如何在 Ruby 中对 JSON 对象的嵌套数组进行排序?