【发布时间】:2017-05-02 14:50:11
【问题描述】:
我是编码新手,在我的大学里,我们目前正在学习 C 和 C++。
我的 C 代码有问题。我希望代码说明我输入日期时是一周中的哪一天。 CodeBlocks 出现多个错误。
我必须为“zeller 的一致性”做一个额外的函数。
我不太清楚如何从其他函数中获取字符串或字符。
在切换的所有情况下,我都会收到警告:“警告:赋值从没有强制转换的指针中生成整数”。 在我的主函数中,我收到警告:“警告:格式 '%s' 需要 'char *' 类型的参数,但参数 2 的类型为 'int' [-Wformat=]”
header.h
int ta, mo, ja, h ,q ,m ,k , j;
char zk(int, int, int) ;
main.c
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main()
{
int tt, mm, jj;
printf("Geben Sie das Datum ein: ");
scanf("%i %i %i", &tt, &mm, &jj);
printf("\n");
char *p = zk(tt, mm, jj);
printf("%s", *p);
return 0;
}
zellerskongruenz.c
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
char zk(int ta, int mo, int ja)
{
if (mo == 1){mo = 13; ja--; }
if (mo == 2){mo = 14; ja--; }
q = mo;
k = ja % 100;
j = ja / 100;
h = ta + ((q+1)*13)/5 + k + k/4 + j/4 - 2*j;
h = h % 7;
char *wochentag;
switch(h)
{
case 0 : *wochentag = "Samstag"; break;
case 1 : *wochentag = "Sonntag"; break;
case 2 : *wochentag = "Montag"; break;
case 3 : *wochentag = "Dienstag"; break;
case 4 : *wochentag = "Mittwoch"; break;
case 5 : *wochentag = "Donnerstag"; break;
case 6 : *wochentag = "Freitag"; break;
}
return wochentag;
}
我非常感谢任何试图帮助我的人。
【问题讨论】:
-
将
char zk(...改为const char * zk(...,char *wochentag;改为const char *wochentag;,所有*wochentag改为wochentag,printf("%s", *p);改为printf("%s", p);。 -
而且,在 C 中最好是
int main(void)。 -
另外,在标头中定义的
int ta, mo, ja也是无用的,因为它们出现在zk()的参数列表中并且因此被隐藏了。其余的h ,q ,m ,k , j;最好在本地定义为zk(),至少从您显示的代码来看,不需要全局定义它们。