我想在该程序中打印星期几,但是它不起作用,该怎么解决?
#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]);
}
}
答案 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;
}