嵌入式C语言基础-03

1. printf函数格式控制

变量类型

控制格式

用法示例

char

%c(字符),%d显示整数

printf("%c\n",a);

short

%十进d(整数)

printf("%d\n",a);

int

%d(十进制整数)

printf("%d\n",a);

int

%nd(十进制整数,占n个字符位置,不足补充空)

printf("%3d\n",a);

int

%-nd(十进制整数,-代表左对齐)

printf("%-4d\n",a)

int

%0nd(十进制整数,占n个字符位置,不足补充0)

printf("%04d\n",a);

int

%#o(八进制整数,#显示八进制前缀0)

printf("%#o\n",a);

int

%#x(十六进制整数,#显示十六进制前缀0x)

printf("%#x\n",a);

unsigned int

%u(无符号,十进制显示数据)

printf("%u\n",a);

long

%ld,%#lo(八进制),%#lx(十六进制)

printf("%ld\n",a);

long long

%lld,%#llo,%#llx

printf("%lld\n",a);

float

%f(显示小数点后6位,显示小数点后两位%.2f)

printf("%.2f\n",a);

float

%g(显示小数点后有效位)

printf("%g\n",a)

float

%e(指数的格式显示小数)

printf("%e\n",a);

double

%lf(显示小数点后6位,显示小数点后两位%.2lf)

printf("%lf\n",a);

int a;获取a的地址&a

%p(打印地址)

printf("%p\n",&a);

char arr[20] ="hello world";

%s,%10s ,%-10s

printf("%s\n",arr);

#include <stdio.h>

int main(int argc, const char *argv[])
{
    printf("%2d-%02d-%02d %02d:%02d:%02d\n",2024,2,27,15,4,23);
    //2024-01-03 15:19:03                                                
    return 0;
    
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    int i,j;
    for(i=1;i<10;i++){
        for(j=1;j<=i;j++){
            printf("%-2d*%2d=%-3d  ",j,i,i*j);
            if(j%i==0){
                printf("\n");
            }
        }
    }
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    float pi=3.123456789;
    printf("pi=%f\n",pi);
    printf("pi=%.2f\n",pi);
    printf("pi=%e\n",pi);//指数形式显示
    printf("pi=%g\n",pi);//显示小数点后有效位
    return 0;
}

# include<stdio.h>
int main(int argc, const char *argv[])
{
	int a=10;
	printf("&a=%p &a=%ld\n",&a,(unsigned long)&a);
	printf("&a=%p &a=%#lo\n",&a,(unsigned long)&a);
	printf("&a=%p &a=%#lx\n",&a,(unsigned long)&a);
    //%#lx控制格式对应的是数值
    //&a是一个地址,地址和值不能直接划等号,所以这里需要强制类型转换  
	return 0;
}

# include<stdio.h>
int main(int argc, const char *argv[])
{
    //char ch[10]={"im lili!"};
    char ch[10]="lili huahu";
    printf("ch=%s\n",ch);
    //将字符数组内的字符显示到终端上,遇到'\0'结束。     
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    char name[50] = "zhangsan"; 
    int age = 20; 
    float score=99.8; 
    char sex = 'm';

    printf("name:%s\tage:%-2d\nscore:%.2f\tsex:%c\n",name,age,score,sex);
    return 0;
}

2. 输入缓冲区介绍

当一个程序无论用哪个函数进行输入时,都会给程序分配缓冲区,也就是一段内存。这个缓冲区分为输入输出缓冲区。输出缓冲区可以用来配合低速读设备。而程序也会把每一个输入字符读到缓冲区当中,直到读到换行符号等情况,程序会刷新缓冲区。由于输入缓冲区的存在,所以要在输入时格外注意输入的垃圾字符的吸收。

3. scanf输入控制

类型

控制格式

用法

char

%c

scanf("%c",&a);向程序输入一个字符

int

%d

scanf("%d",&a);向程序输入一个整数

int

%4d

scanf("%4d",&a);向程序输入整数,整数的宽度是4

unsigned int

%u

scanf("%u",&a);向程序输入一个无符号整数

long

%ld

scanf("%ld",&a);向程序输入一个long整数

long long

%lld

scanf("%lld",&a);向程序输入一个long long整数

float

%f

scanf("%f",&a);向程序输入一个浮点数

double

%lf

scanf("%lf",&a);向程序输入一个浮点数

char a[20];

%s

scanf("%s",a);a是数组名,又是数组的首地址,所以这里不需要取地址符号

char a[20];

%[^\n]

scanf("%[^\n]",a);表示除了'\n'之外的所有字符都输入到数组中,遇到'\n'停止

# include<stdio.h>
int main(int argc, const char *argv[])
{
    char ch;
    scanf("%c",&ch);
    printf("ch=%c\n",ch);
    printf("ch=%#x\n",ch);
    printf("ch=%d\n",ch);
    return 0;
}
// a
// ch=a
// ch=0x61
// ch=97
# include<stdio.h>
int main(int argc, const char *argv[])
{
    printf("请输入小写字母:");
    char ch;
    scanf("%c",&ch);
    while(!(ch>96&&ch<123)){
            scanf("%c",&ch);
            }
    printf("%c\n",ch-32);
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    int a;
    printf("input>");
    scanf("%d",&a);
    printf("a=%d\n",a);
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    int num;
    printf("input>");
    scanf("%d",&num);
    while(!(num>99&num<1000)){
        scanf("%d",&num);
    }
    int dex=num/100;
    int ox=(num-100*dex)/10;// ox= num%100/10;
    int ge=num%10;
    printf("ge=%d ox=%d dex=%d\n",ge,ox,dex);
    return 0;
    //要哪一位上的数字,就先取高位模再除该位权
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    float pi;
    printf("input the value of pi>");
    scanf("%f",&pi);
    printf("pi=%g\n",pi);
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    //输入字符串
    char ch[50];
    printf("input>");
    scanf("%s",ch);//%s在输入字符串的时候遇到空格,Tab,换行都会停止
    printf("%s\n",ch);
    /*
    printf("input>");
    scanf("%c",ch);
    printf("%s\n",ch);这样写后面显示的是脏数据
    */
    
    //错误用法:printf("%s\n",ch[1]);
    //正确用法:printf("%c\n",ch[1]);
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    char ch[50];
    printf("input>");
    scanf("%[^\r]",ch);
    //scanf("%[^\'a']",ch);
    //%[^\n]:表示除了'\n'之外的所有的字符都输入到arr数组中
    printf("ch=%s\n",ch);
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    printf("input>");
    int a;
    //测试tab 空格 换行符 对输入是否有影响
    // scanf("  %d",&a);
    //scanf("\n%d",&a);
    // scanf(" %d",&a);
    //以上符号放在格式控制符前无影响
    
    // scanf("%d    ",&a);
    // scanf("%d\n",&a);
    scanf(" %d",&a);
    //在控制格式后加空格,Tab,换行对输入是有影响的,必须输入一个任意字符程序才能结束
    //所以在使用scanf的时候后面不要写空格,Tab,换行。
    printf("a=%d\n",a);
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    int sex;
    char age;

    //scanf("%d%c",&sex,&age);
    printf("age>");
    scanf("%d",&age);
    printf("sex>");
    scanf("%d",&sex);
    scanf("%*c%c",&sex);//%*c吃掉一个任意字符
    //当输入完年龄后会敲入回车,这个回车符会被后面的scanf当作输入,从而未到输入就结束运行。
    //另外,这种情况发生是因为后一个输入是字符类型,会把回车给吃了。
    printf("sex:%d,age:%d\n",sex,age);
    return 0;
}
#include <stdio.h>

int main(int argc, const char *argv[])
{
    char sex;
    int age;
        
    printf("input sex> ");
    scanf("%c",&sex); 

    printf("input age> ");
    scanf("%d",&age); 
    //%d在读取整数的时候,如果前面有空格,Tab,换行对整数输入没有影响                  
        
    printf("age = %d,sex = %c\n",age,sex);
    return 0;
}
#include <stdio.h>

int main(int argc, const char *argv[])
{
    char sex;
    int age;
    
    printf("input age,sex> ");
    scanf("%d,%c",&age,&sex); 
    //控制格式是什么,输入就必须按照对应的格式进行
    //12,s
    printf("age = %d,sex = %c\n",age,sex);
    return 0;                           
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    char name[50];
    char sex;
    int age;
    printf("input>");
    //scanf("%s",name);
    scanf("%*c%[^\n]",name);//后面输入字符务必要注意垃圾刨除字符
    scanf("%c",&sex);
    scanf("%d",&age);
    printf("name=%s,sex=%c,age=%d\n",name,sex,age);
    
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    char name[50];
    char sex;
    int age;

    printf("input>");
    //1)控制格式中如果有逗号,会把所有的字符都读到name中
    // scanf("%c,%c,%d",name,&sex,&age);

    //2)如下格式正确:
    // scanf("%s %c %d",name,&sex,&age);

    scanf("%[^\n] %c %d",name,&sex,&age);
    //3)对于这种写法,在输入name后需要敲回车
    //输入sex和age后都要敲回车
    printf("%s %c %d\n",name,sex,age);
    return 0;
}

scanf函数输入总结:

  1. 当前有多个输入且后面输入中有输入字符时,应当用%*c吸收垃圾字符。
  2. scanf输入格式严格按照前边的格式规定输入,两个格式控制符之间有逗号或空格就必须输入空格。
  3. 可以用%[^\n]控制全部敲回车后输入。
  4. 控制格式中不能有逗号,否则会把多个输入当成一个输入,可用空格。
  5. 格式控制符后边若有字符则会对输入结束条件有影响,必须输入该字符表示输入结束。

4. getchar函数

用法:1.输入一个字符。2.吸收垃圾字符

# include<stdio.h>
int main(int argc, const char *argv[])
{
    char ch;
    ch=getchar();
    printf("ch=%c\n",ch);
    return 0;
}
# include<stdio.h>
int main(int argc, const char *argv[])
{
    char sex;
    char name;
    printf("input>");
    scanf("%c",&sex);
    getchar();//吃掉缓冲区中的'\n'垃圾字符的

    printf("input>");
    scanf("%c",&name);
    name=getchar();
    getchar();//吃掉缓冲区中的'\n'垃圾字符的

    printf("name:%c sex:%c\n",name,sex);
    return 0;
}

5. purtchar函数

putchar(ch);

功能:将ch字符输出到终端上

# include<stdio.h>
int main(int argc, const char *argv[])
{
    char ch;
    ch=getchar();//获取一个字符

    putchar(ch);//用法1.输出字符变量
    putchar('\x41');//用法2.输出十六进制字符常量
    putchar(10);//用法3.输出十进制字符常量,10对应换行符
    putchar('\101');//用法4.输出八进制字符常量
    putchar(10);
    putchar('A');//用法5.直接输出字符常量
    putchar(10);
    
    putchar(getchar());//用法6.
    getchar();
    putchar(10);
    return 0;
}

6. gets函数

gets(字符数组名)

功能:从终端上读取字符串放到字符数组中,会在结尾补充'\0',gets函数支持输入空格和Tab,gets不会对越界进行检查,所以使用的使用注意数组成员的个数。

# include<stdio.h>
int main(int argc, const char *argv[])
{
    char ch[50];
    gets(ch);
    //从终端上读取一个字符串放到s数组中,会在结尾补充'\0'
    //编译的时候这个函数会报警告,这个警告暂时忽略
    printf("%s\n",ch);
    return 0;
}

7. puts函数

puts(数组名或字符串);

功能:将字符串打印到终端上,这个函数在输出完字符串之后会自动加'\n'换行符

# include<stdio.h>
int main(int argc, const char *argv[])
{
    char s[100];
    gets(s);//从终端上读取字符串放到s数组中,gets会将缓冲区中的'\n'读走替换成'\0'
    puts(s);//1)将s中的字符串打印到终端上,会在结尾自动加'\n'
    
    puts("hello everyone !!");//2)
    puts("");//3)输出换行符,等价于putchar(10),等价于printf("\n");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值