首页 > 解决方案 > 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]);   
    }
}

标签: carrays

解决方案


在 functiondisplay_levels中,您试图打印一个字符,"%5c"但给出一个字符串文字""作为参数,这会导致 UB(未定义的行为),这是一个充满惊喜的潘多拉盒子。
您应该将参数替换' '为预期结果。

printf("Level %d%5c%d\n", level, ' ', arr[i]);
/*                               ^^^            */

或者,您可以替换"%5c""%5s".


推荐阅读