printf与scanf

printf(格式控制,输出表列) 标准输出函数
scanf(格式控制,地址表列)  标准输入函数
格式控制:d 有符号十进制整数(u为无符号)
        o 无符号八进制整数
        x、X 无符号十六进制,小、大写abcdef
        f 浮点数
        c 字符
        s 字符串
        p 指针
转义字符:/r /n /b /t /f // /' /" /ddd /xhh

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
    int i = 10;
    //把i的地址强转成int型赋给j
    int j = (int)&i;
    //把j的地址强转成int型赋给i
    i = (int)&j;

    //输入一个整数到j的地址
    scanf("%d", i);
    //原本j的值为i的地址,但是通过上面scanf语句改变了j的值
    //此句的j不为地址,或者说那个整数地址不可访问,编译器报错
    scanf("%d", j);

    system("pause");
 return 0;
}

说到scanf关于格式控制%s必须要注意
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
    //字符串
    char szName[10];
    char szPassword[10];

    //输入用户名 123456
    printf("请输入用户名:");
    //s前+数字控制长度
    scanf("%9s", szName);
    //输入密码   1234567890123
    printf("请输入密码  :");
    //没有控制
    scanf("%s", szPassword);

    printf("%s,%s/r/n", szName, szPassword);

    system("pause");
 return 0;
}
输出结果为:3,1234567890123
为什么结果是这样呢?
当前面定义字符串语句的时候系统为szName和szPassword分配了一片空间
0012FF68  CC CC CC CC
0012FF6C  CC CC CC CC
0012FF70  CC CC CC CC 输入用户名123456变化 
0012FF74  CC CC CC CC      =>      31 32 33 34
0012FF78  CC CC CC CC      =>      35 36 00 CC
0012FF7C  CC CC CC CC      =>      CC CC CC CC
从上面可以看出字符串szName的首地址为0012FF74,字符串以字符'/0'结尾
输入密码1234567890123变化
0012FF68  CC CC CC CC   =>  0012FF68  31 32 33 34
0012FF68  CC CC CC CC   =>  0012FF6C  35 36 37 38
0012FF68  CC CC CC CC   =>  0012FF70  39 30 31 32
0012FF74   31  32  33   34   =>  0012FF74  33 00 33 34 
0012FF78  35 36 00 CC   =>  0012FF78  35 36 00 CC
0012FF7C  CC CC CC CC   =>  0012FF7C  CC CC CC CC
从上面可以看出除了CC改变以外,0012FF74 0012FF75地址里的值也发生了改变
然后以szPassword首地址为0012FF68,以字符'/0'结尾。
可得szPassword为1234567890123(31 32 33 34 ... 33 00)
再以szName首地址为0012FF74,以字符'/0'结尾。
可得szName为3(33 00)

好啦!这节还是比较有趣的,printf,scanf一些具体的格式控制详见MSDN。
                     


        
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值