C 笔记本

  1. xprintf( "Sum is %d/n",sum);

    输出 Sum is xxx

  2. printf( "Sum is /n%d",sum);

    输出 Sum is

    Xxx

区别在于换行符(/n)在转换符前面(%d),这个区别也很奇怪,逻辑上在同一句语句中,既然有换行符,那么输出应该是第二种形式,为什么会出现第一种情况呢?可能的解释是第一种情况转换符在线,那么先显示出转换符的数字,在去只能换行符。

更新:现在明白了,printf包含两个实参,前面一个叫格式控制字符串,顾名思义控制输出的格式,而%d并不只是代表格式,还代表了在后面的变量名。("Sum is %d/n",sum)=("Sum is (十进制数sum)(换行)").这说明引号("")里面并不单单表示字符串,其中也是有变量存在的。

 

  1. while (loanPrincipal!=-1);

    如果在循环语句后加入";"则程序会停止执行。

 

1. 建议还是自己写个东西来得快, 大部头的书在用的不熟的时候看多了意义也不打.

可以写个小游戏之类的, 比如坦克大作战, 如果觉得麻烦, 写个5子棋, 至少要写个计算器吧.

等熟了, 就看自己要弄得方向了, 如果搞嵌入式, 可以找个开发板, 从boot loader, download tool一直到移植一个简单的ucos2.

 

  1. 在if…else…语句中,需要使用

    If

    {

    }

    Else

    {

     

    }

    即if 与else 的大括号要分开,否则会出现错误。

     

     

  2. 以下函数 在main{}之外

    int rolldice(void)

    {

        int face1;

        int face2;

    int point;

    

    face1=1 + rand()%6+1;

face2=1 + rand()%6+1;

    point = face1 + face2;

    printf("player rolled %d + %d = %d/n",face1,face2

             ,point);

    return point;

}

 

可以这样使用 :

total= rolldice();

total可以接受到返回值,又能运行printf语句。

 

  1. 定义 double x;

    Scanf("lf", &x);

 

 

1.关于getchar()

 

printf ("Enter the length of side and char: ");

    scanf("%d", &side);

    printf("请输入符号:");

 

    fflush(stdin); /*如果不加此行getchar会读取scanf的回车符作为值,此行命令头加上 #include */

 

    ch=getchar();

 

  1. 数组名称既然代表数组的内存地址,为什么在给数组用scanf赋值的时候加"&"

程序代码:

#include

int main(void)
{
    int i=0;
    float monthlyTemperatures[12]={0};

    for (i=0;i<12;i++)
    {
        printf("Enter the integer: ");
        scanf("%f",&monthlyTemperatures[i]);
    }

    for (i=0;i<12;i++)
    {
        printf("%.2f/n",monthlyTemperatures[i]);
    }

    
        return 0;
}
   

P.S. 给字符串数组赋值时又不加,这两者似乎有矛盾。

 

回答:

1.十分感谢各位回答,尤其四楼五楼给我很大启示

现在的理解对于"数值型数组"代表物理内存的"初始"地址,编译器无法寻找到数组的"后续"地址

程序代码:

scanf("%f",&monthlyTemperatures[i]);
//修改成
scanf("%f",monthlyTemperatures);


编译通过,赋值总是在数组monthlyTemperatures[0]上。
原因也许没有办法区分每个数值,比如12345,可以代表一个整体,也可以代表分离的1、2、3、4、5,那干脆只要是数值类型编译器就认为是整体。

对于字符串型数组的话,可以非常简洁的认为每个字符代表数组的一个元素,在接收的时候按顺序即可排列成为一个字符串数组。

2. 写成scanf("%f", monthlyTemperatures + i);即可!

看了楼上的回答觉得大家对指针还是一知半解,现在我来解释一下:

[]它是变址运算符,其如 arr[1] = *(arr + 1)

&arr[1]就是&(*(arr + 1)) 就是arr第二个元素的地址,所以也可以写成arr + 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值