为了账号安全,请及时绑定邮箱和手机立即绑定

输出了一堆乱码。。。。细节有问题??

/ 猿问

输出了一堆乱码。。。。细节有问题??

C
慕粉3374841 2016-11-08 17:07:08

#include <stdio.h>

int main() 

    /* 定义需要计算的日期 */

    int year = 2008;

    int month = 8;

    int day = 8;

    int a;

    swich(mouth)

        {

        case 1:

            a=day;

            printf("是第%d天","a");

            break;

        case 2:

            

            a=31+day;

            printf("是第%d天","a");

            break;

        case 3:

            if(year%400==0||year%4==0&&year%100!=0)

            {

                a=60+day;

            }

            else

            {

                a=59+day;

            }

            printf("是第%d天","a");

            break;

        case 4:

            a=91+day;

            printf("是第%d天","a");

            break;

        case 5:

            a=121+day;

            printf("是第%d天","a");

            break;

        case 6:

            a=152+day;

            printf("是第%d天","a");

            break;

        case 7:

            a=182+day;

            printf("是第%d天","a");

            break;

        case 8:

            a=213+day;

            printf("是第%d天","a");

            break;

        case 9:

            a=244+day;

            printf("是第%d天","a");

            break;

        case 10:

            a=274+day;

            printf("是第%d天","a");

            break;

        case 11:

            a=274+31+day;

            printf("是第%d天","a");

            break;

        case 12:

            a=274+31+30+day:

            printf("是第%d天","a");

            break;

        default :

            a=366;

            printf("是第%d天","a");

            break;

        }

   

    

}/*


查看完整描述

3 回答

已采纳
?
onemoo

就像前面两位所答的,你要明白printf函数的用法,我先详细说明下:

printf的第一个参数肯定是字符串。后面的参数可能有,也可能没有。printf的主要功能就是输出第一个参数的那个字符串:

printf("aaa");  // 这个调用就只传了第一个字符串,printf会打印出 aaa 这三个字母


当你想要让打印的字符串中含有其他可变的内容时,比如你想打印出 a = XX 这几个字,而这里的 XX 是一个int变量a的值,这时就需要用到后面的参数了,这种行为叫“格式化输出”。

具体做法是:需要在第一个参数的字符串中相应的位置上写上“格式化指示符(就是%d %f这类的)”,后面的参数就对应传入要放在这里的变量:

int a = 100;
// 整型的格式化指示符是 %d
printf("a = %d", a);  // 这次调用传入两个参数,这样变量a的值就被代入打印的字符串中%d的位置上,最终会打印出 a = 100 这几个字

double b = 10.0;  // 变量b是浮点型double,在printf函数中的格式化指示符是 %f
printf("b = %f", b);  // 这次会打印出 b = 10.000000,默认打印小数点后六位

// 如果需要打印多个内容,后面的参数就按格式化指示符的出现顺序传入
printf("a = %d  b = %f", a, b);  // 这次要传入三个参数。第一个参数中先出现%d,所以后面先传入a

这里需要注意:这些格式化指示符一定要配合后面传入的参数的类型。比如前面例子里传入的变量a是int型,那就一定要用%d...   这个格式化指示符本身还可以配上其他的控制参数,比如浮点型默认打印小数点后六位,你也可以指示它打印多少位......  这里就不详细说了。


总之第一个参数就是要打印的字符串,后面的参数都是配合它的。

当然第一个参数中也可以加入其他的“控制字符”,比如可能我们需要让打印的内容独自占用一行,那就在第一个参数的最后加上“换行符(\n)”

printf("aaa\n");  // 这样打印完aaa后会换行


所以你调用printf时,后面的参数就传错了。你应该直接传入a:

printf("是第%d天", a);

而你传入a时加了双引号则使该参数变成了字符串! 而字符串和第一个参数中的整型格式化指示符%d不符,这样一般会打印出乱码。  顺便说下,一般这样的代码在编译时会有警告的。



另外,你这代码逻辑也有问题:你只在case 3时做了闰年判断,那后面的月份呢? 难道就不过2月了吗??

查看完整回答
2 反对 回复 2016-11-08
?
qq_fn小虎007fn_03977581

a是int格式的是数,在C语言输出,a不需要用“”括起来

查看完整回答
反对 回复 2016-11-08
?
KanoWill

注意源代码文件编码,如果和系统编码不一致在命令行输出就会乱码的

查看完整回答
反对 回复 2016-11-08

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信