c语言中怎样用scanf()读入带空格的字符串
#include <stdio.h>
int main()
{
char str[128];
scanf( "%[^\n]", str );
printf( "%s\n", str );
return 0;
}
c语言编译常识
- gcc hanshu.c -o hanshu:生成了一个可运行的文件,文件名称可以自己定,hanshu.c只是随便一个代码文件,注意后面的命名不要和前面的相同。
- gcc hanshu.c -o hanshu -g -wall,:-g -wall是开启所有的语法警告。
- 我的电脑是小端法存储,其显示结果是103,说明地址0xf1存的是67.
- %p输出变量的地址
int main()
{
int a = 0x1234567;
char *p = (char*)&a;
//char *p = char *(&a);
printf("*p=%d",*p);
return 0;
}
- 打印双引号,需要加转译字符"
- 打印%,需要在其前再加一个%
- 打印,需要在其前面加一个\
- 打印’ 需要加\
char型的asc码的一些数值
- ' 空格 ':空格的asc码是32
- ‘0’是32
- '\0'是0
- ‘A’是65
- ‘a’是97
scanf===scan formatter扫描 格式化
强制类型转换(type)
int main()
{
int a=9;
int b=8;
float c=a/(float)b;////价格(float)转换了b的类型,实际上转换了8成8.0000000
printf("c=%f",c);
return 0;
}
位运算
- |或运算:::3:的二进制:0011······5的二进制:0101:::3|5表示0111;其意义是二进制,有1结果就是1
- &与运算:::必须两个都为1,结果才是1
- ^异或:::表示一个为1结果才是1,如果两个都是1,结果为0;
- ~取反:::3的取反为4.取反都是在补码的基础上操作的。
原码,反码,补码
- 反码:正数的反码与原码;负数的反码在原码的基础上,符号位不变,后面依次取反。
- 补码:正数的补码与原码相同;负数的补码在反码的基础上+1。数据在内存当中是以补码的形式存在。
- -3取反:
原码:1000 0000 |0000 0000 |0000 0000 |0000 0011
反码:1111 1111 |1111 1111 |1111 1111 |1111 1100
补码:1111 1111 |1111 1111 |1111 1111 |1111 1101
在这基础上全部取反
~(-3)
0000 0000 |0000 0000 |0000 0000 |0000 0010
正数的反码,补码都一样。
所以结果是2.
左移,右移:
案例:-3的左移2位(-3)<<2
-3的原码:1000 0000 |0000 0000 |0000 0000 |0000 0011
-3的反码:1111 1111 |1111 1111 |1111 1111 |1111 1100
-3的补码:1111 1111 |1111 1111 |1111 1111 |1111 1101
左移两位:1111 1111 |1111 1111 |1111 1111 |1111 0100
左移反码:1111 1111 |1111 1111 |1111 1111 |1111 0011
左移原码1000 0000 |0000 0000 |0000 0000 |0000 1100
案例:-3的右移两位:注意左边是以符号位补全
-3的原码:1000 0000 |0000 0000 |0000 0000 |0000 0011
-3的反码:1111 1111 |1111 1111 |1111 1111 |1111 1100
-3的补码:1111 1111 |1111 1111 |1111 1111 |1111 1101
-右移两位:1111 1111 |1111 1111 |1111 1111 |1111 1111
右移后反码:1111 1111 |1111 1111 |1111 1111 |1111 1110
右移后原码:1000 0000 |0000 0000 |0000 0000 |0000 0001
一个特殊的例子
{
int a=1;
int b=12;
if(a++||b--)
{
printf("a=%d\n",a);///a自加1,所以打出来。
printf("b=%d\n",b);///因为a已经成立了,
所以b不会自加1就进入到判断里面了,结果a=2,b=12.
}
return 0;
}
unsigned的使用
int main()
{
unsigned char a=-1;////这里的-1,它的补码存储:1111 1111,
因为他是没有正负号,所以我们默认它为正,把补码变成原码,它就是255.
int i=0;
printf("a=%d",a);
while(a>0)
{
a--;
i++;
}
printf("a=%d",a);
printf("i=%d",i);
return 0;
}
用二维数组写菱形,
{
int i,j;
char a=' ';
char b='*';
int arr[5][5]={
{a,a,b,a,a},
{a,b,a,b,a},
{b,a,a,a,b},
{a,b,a,b,a},
{a,a,b,a,a},
};///如果arr是char型的,逗号就没办法处理
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%c",arr[i][j]);
}
printf("\n");
}
return 0;
}
网友评论