如何使用结构成员打印星期几?

时间:2019-03-06 08:21:20

标签: c arrays structure

我想在该程序中打印星期几,但是它不起作用,该怎么解决?

#include<stdio.h>
struct month{
    int date[12];
    char day[7];
}mon;
main()
{   int i;

    strcpy(mon.day[0],"Sunday");
    strcpy(mon.day[1],"Monday");
    strcpy(mon.day[2],"Tuesday");
    strcpy(mon.day[3],"Wednesday");
    strcpy(mon.day[4],"Thursday");
    strcpy(mon.day[5],"Friday");
    strcpy(mon.day[6],"Saturday");

    for(i=0;i<7;i++)
    {
        printf("Day %d is %c\n",i+1,mon.day[i]);
    }

}

3 个答案:

答案 0 :(得分:4)

您正在尝试将字符串存储在char中。但是,字符串是char的数组。代替此:

char day[7];

您需要以下内容:

char day[7][16];

现在您有16个char可以容纳一个工作日,您有7次,每天一次。另外,您的打印错误。要打印字符串,您需要%s,而不是%c%c仅用于一个字符:

printf("Day %d is %s\n", i + 1, mon.day[i]);

另一种实现方法是使用char*而不是char的数组,并且仅存储字符串的地址而不是复制字符串:

char *day[7];

然后存储如下地址:

mon.day[0] = "Sunday";
mon.day[1] = "Monday";
mon.day[2] = "Tuesday";
...

并使用%s以相同的方式打印。

答案 1 :(得分:2)

如果尝试编译程序,则编译器会向您发出某些警告。喜欢

  • 问题1:

    source_file.c:10:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
     main()
     ^
    

    在通常的托管环境中,main()的正确签名是int main(void)

  • 问题2:

    source_file.c: In function ‘main’:
    source_file.c:13:5: warning: implicit declaration of function ‘strcpy’ [-Wimplicit-function-declaration]
         strcpy(mon.day[0],"Sunday");
         ^
    source_file.c:13:5: warning: incompatible implicit declaration of built-in function ‘strcpy’
    source_file.c:13:5: note: include ‘<string.h>’ or provide a declaration of ‘strcpy’
    

    您需要包含string.h头文件,其中包含strcpy()的声明。

  • 问题3:

    source_file.c:13:12: warning: passing argument 1 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion]
         strcpy(mon.day[0],"Sunday");
    

    这表明strcpy()的第一个参数期望使用char *,但是您要传递的是char,并强制转换为int

    这是这里最重要的一点,如您所见,您需要传递一个 buffer ,其中可以包含复制的字符串中的内容。周四,您需要

  • day是二维数组

  • 使用day[i]存储内容
  • 使用%s打印其内容。

答案 2 :(得分:0)

对于诸如日和月之类的常量,除非您正在使用struct进行练习,否则应采用如下所示的更好的构造。

#include<stdio.h>
int main()
{   
    const char *day[] = {"Sunday", "Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday" };
              //^^^^^ array of strings.
    for(int i=0;i<7;i++)
        printf("Day %d is %s\n",i+1,day[i]);
    return 0;
}