首页 > 解决方案 > CS50 马里奥 - 错误帮助;格式字符串未使用数据参数

问题描述

我无法完成马里奥,也不知道为什么它不起作用。

我观看了一段视频,有人使用“void print (char c, int n); 作为顶部的 protocode(?),但我不明白为什么它应该在那里。

代码:

#include <stdio.h>
#include <cs50.h>

int main(void)
{
    int n;
    do
    {
        n = get_int("Height: ");
    }
    while (n < 1 || n > 8); 
    for (int i = 0; i < n; i++)
    {
        printf(".", n - 1 - I);
        printf("#", i + 1);
        printf("\n");
    }     
}

错误:

clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow    marioblock.c  -lcrypt -lcs50 -lm -o marioblock
marioblock.c:14:19: error: data argument not used by format string
      [-Werror,-Wformat-extra-args]
      printf(".", n - 1 - i);
             ~~~  ^
marioblock.c:15:19: error: data argument not used by format string
      [-Werror,-Wformat-extra-args]
      printf("#", i + 1);
             ~~~  ^

标签: ccs50format-string

解决方案


这是一个语法错误。您printf以错误的方式使用(参数)。您可能想要for loop多次打印相同的符号。

例如,以下代码将打印 3 个哈希值###

int main(void)
{
    for(int i = 0; i < 3; i++)
    {
        printf("#");
    }
    printf("\n");
}

要实现 mario pset,请使用一个 for 循环打印散列,使用另一个 for 循环打印空格。我希望这可以帮助您理解设计。


推荐阅读