我使用printf函数有什么问题吗?

Swarnim khosla

我被赋予以下任务以在C中执行:-

一年分为四个季节:春季,夏季,秋季和冬季。尽管由于日历的构建方式,每年的确切日期会有所不同,但在本练习中,我们将使用以下日期:

季节第一天
夏季3月20日
春季6月21日
秋季9月22日
冬季12月21日

创建一个程序,从用户读取一个月和一天。用户将以字符串形式输入月份名称,然后以整数形式输入月份中的日期。

然后,程序应显示与输入日期关联的季节。

注意:输入月份的前三个字母,例如:Jan表示一月,Feb表示二月,以此类推...。月份的第一个字母应为大写。

我编写了一个迷你测试代码来检查第一个条件,即3月20日。

这是我的代码:-

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
int date;
char month[3];

printf("Enter the month\n");
scanf("%s",month);

printf("Enter the date\n");
scanf("%d",&date);

int temp;
temp= strcmp(month,"Mar");
printf("output is %d\n",temp);
return 0;
}

我得到的问题是当输入为Mar20时,我得到输出:- “ output is 20”而我想在我的测试代码中将输出输出为0。

另一个观察结果是,如果我将日期更改为任何随机数,则将其作为输出,而我假设将得到存储在Temp中的值,即0。

如果我从代码中完全删除可变日期,我将获得正确的输出那时我得到0。

加布里埃尔·桑切斯(Gabriel Sanches)

使用printf函数是正确的,您使用正确的转换说明符'%d'来打印整数,如https://linux.die.net/man/3/printf所述

变量“ month”可能不是很好这是一个3字节的char缓冲区,用于存储。您使用它来存储以null终止的字符串,因此它只能存储2个ASCII字符+ null终止符。

另一个问题是scanf函数如何用于获取月份字符串。如果不指定字段宽度,情况可能会变得很糟,请参阅https://linux.die.net/man/3/scanf了解更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章