首页 文章

C从数组编程printf

提问于
浏览
0

Screenshot of the program

在该程序中,用户以数字的形式输入年份的日期和月份 . 输出必须是字母 . 我无法改变变量 .

  • 我没试过%s,认为这是一个字符串,但它不起作用 .

  • 列表项我不明白为什么我们必须使用指针,如果月份名已经是一个数组?我以为它们是同一个东西,还是等同的?在此先感谢您的帮助 ! :)

3 回答

  • 4

    使用 monthnames[month] 从类似的数组中获取字符串 .

    你看,月份名是 char 的数组的数组(但我们将其表示为指针) . 由于我们在这里将指针视为数组,因此我们不需要取消引用它 .

    如果您不打算更改它们,您也可能希望将您的事物声明为 const . 这是's not required, but it'的好习惯 .

    我做了一个程序来测试这个,以防你不相信我:

    #include <stdio.h>
    
    int main(void)
    {
        const char* monthnames[2] = { "Jan", "Feb" };
    
        printf("%s\n", monthnames[0]);
        printf("%s\n", monthnames[1]);
    
        return 0;
    }
    

    输出:

    Jan
    Feb
    
  • 1

    您的变量monthnames是一个指向以null结尾的字符串的指针数组 . 这意味着 monthnames[month] 是一个指向以null结尾的字符串的指针,您可以使用%s打印该文件,而 *monthnames[month] 是该字符串中您可以使用%c打印的第一个字符 . *pointer 表示 pointer 指向的变量 .

    在使用 month 索引数组之前检查用户输入可能也是个好主意 . 如果用户输入20个月或负月份的大月,您的程序可能会在没有这样的检查的情况下发生段错误 .

  • 1

    对于打印月份名称只需使用

    printf("%s", monthnames[month]);
    

    代替

    printf("%c", *monthnames[month]);
    

    后者只是在某个月打印出第一个字符 .

    monthnames 是指向 char 的指针数组 . 因此,您可以使用该数组中的每个元素指向C字符串 - 就像代码中的情况一样 .

    注意:注意索引,在代码注释中,您建议4月是第4个月 . 然后十二月将是第12,但你的数组只能有最大索引11 .

相关问题