2.6字符型:char

2.6.1字符变量的定义和输出  

char的本质就是一个1字节大小的整型
#include<stdio.h>
int main(int argc,char *argv[])
//1、内存中没有字符,只有数字
//2、一个数字,对应的一个字符,这种规则就是ascii
//3、使用字符或数字给字符变量赋值是等级
//4、字符类型本质上就是1个字节大小的整型

//此文中出现单引号是为了方便,不加不影响运行

//字符:‘一个字符’
char ch=’a';
printf("ch1 =%c, ch = %d\n", ch, ch);
ch=97;//以ascii赋值,和ch='a'等价的
printf("ch2 =%c\n",ch);
效果:
//小写字母比大写字母大32
char a = 'A';
char b = 'a'
printf("A = &d, a = %d\n", a, b);
效果:
//小写转大写,小写字母-32
printf("小写转大写: %c\n", 'a' - 32);

//大写转小写,大写字母+32
printf("大写转小写: %c\n", 'A'  +32)


效果;

2.6.3 转义字符

//字符,原则上",内部只有一个字符,转义字符除外
//char a='abc';//不合理

//转义字符,由反斜杠\组成的多个字符
  char ch='\n';//换行符
  printf("ffff%c", ch);

ch='\r';   //光标切换到句首
printf("abcddd%cefg\n",ch);

ch='b';//退格
printf("12%c3456\n", ch);

2.6.4 数值溢出


2.7实型(浮点型):foat、double

·尽量不要使用,使用不准确
float存储不准确例子:
{
float a=100.9f;
printf("%f\n", a);
return 0;
}
float正确使用方法:
{
float a;
printf("请输入float:");
scanf("%f", &a);
printf("%f\n", a);
return 0;
}
double的使用方法:
{

double b;
b = 3.14;
printf("b = %lf\n", b);
return 0;
}


2.8 类型限定符

限定符                                                            含义
extern                         声明一个变量,sxtexm声明的变量没有建立存储空间。
const                           定义一个常量,常量的值不能修改。const int a= 10;
volatile                      防止编译器优化代码(加上这个,可以防止编译器跳过中间步骤)
register                     定义寄存器变量,提高效率。register是建议型的指令,而不是                                       命令型的指令,如果 CPU有空闲寄存器,那么register 就生                                           效, 如果没有空闲寄存器,  那么register 无效。                                                                             
2.9 字符串格式化输出和输入
2.9.1字符串常量
·定义:字符串是内存中一段连续的char空间,以‘\0'(数字0)结尾

每个字符串的结尾,编译器会自动的添加一个结束标志位’\ 0’,即"a”包含两个字符’ a' 和’\0’

2.9.2 prntf 函数和 putchar 函数

1.输入:printf("mike = %s\n", "s");
   输出:mike = s
2.输入:int a = 10;
             printf("&a = %p\n", &a);
   输出:&a = 0x7ffd6e216b14
//&+字符,用于查询字符的地址,且每次运行后地址都会改变
3.输入:printf("% \n");  //这样输出会有警告,虽然可以运行出%
//%+内容,才是表示输出内容(比如%d,%c)
   输入:printf("%%d\n");
   输出:%d
//%%在屏幕输出一个%,后面的d也会输出
4.输入:int a = 123
             printf("a1 = %d\n", a);
   输出:a1 = 123
输入:printf("a2 = '%5d'\n", a);
//%5d,以5个字符输出,没有的字符以空字符填充,默认是右对齐
输出:a2 = '  123'

输入:printf("a3 = '%05d'\n", a);
//%05d,以5个字符输出,没有的字符以0填充,默认是右对齐
输出:a3 = '00123'

输入:printf("a4 = '%-5d'\n", a);
//%-5d,以5个字符输出,没有的字符以空字符填充,-代表指定为左对齐
输出:a4 = '123  '
  
输入:printf("a5 = '%-05d'\n", a);
//0 和 - 不能同时使用 
输出:a5  = '123  '

输入:double b = 3.14;
printf("b1 = %lf\v", b);
//默认小数点后面6位,不够补0
输出;'b1 = 3.140000'

输入:printf("b2 = '%8.3lf\n", b);
//8.3,8代表总共有8个字符,3代表小数点后有3位,默认右对齐
输出:b2 = '   3.140'

putchar是将内容输出到屏幕
输入之前:edu@edu:-/share/c code/day05$
输入:char ch = 'a';
putcahr(ch);  //把ch的内容输出到屏幕
输出:aedu@edu:-/share/c code/day05$

实现换行:
输入char ch = 'a'
       putchar(ch);  //不可以输入putchar(“ch\n”)来实现换行,因为对于()内的是变量
       //可以输入printf("\n“)来实现换行
        putchar('\n');

2.9.3 scanf函数与 getchar函数
scanf:

输入:int a;
           printf("请输入a:");
           scanf("%d", &a);
           printf("a = %d\n",a);
输出:请输入a:x
                     a = x
输入: int b;
            int c;
            printf("请输入b,c:")
            scanf("%d %d",&b,&c);
            printf("b = %d, c = %d\n",b,c);
输出: 请输入b, c:20 30   //此处输出时需要空一行
            b = 20 c = 30

输入:char a;
          printf("请输入字符a:");
          scanf("%c", &a);
          printf("a = '%c'\n:, a);    //如果代码到这里,则会正常运行

          char b;
          printf(请输入字符b:);
          scanf("%c", &b);
          printf("b = '%c'\n", b);    //如果代码到这里,则会只有上一步的代码正常运行
效果:

//知识点:此处当用户输入字符时,编译器默认把输入的内容先放在一块内存中(缓冲区),scanf()自动在缓冲区读完内容

键盘输入的会进入缓冲区
scanf("%c",&a); 只读一个字符
1、第1次把t取走,留下\n还在缓冲区
2、第2次scanf,由于缓冲区还有内容所以直接取内容,无需输入(相当于第二次把\n这个指令,也就是换行给读取了)

接下来进行第三次输入:
char c;
printf(”请输入字符c:");
scanf("%c, &c");
printf("c = '%c '\n", c);
输出:a = x
           b = y
           c = z
或者:把第二个命令的printf都给删去,为的是吃掉上一步的\n,不做处理
如下:
char b;
scanf("%c", &b );

getchar:

简单理解来说也是输入
a = getchar();  //读取键盘的字符,放在变量a(相当于scanf)
b = getchar;
c= getchar;

输入:char a ;
          printf("请输入字符a:");
          a = getcahr();
          printf("c = '%c'\n, c");
输出: a = x


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值