数据类型
int
char
short
long
long long
float
double
#include "stdio.h"
int main(int argc, char const *argv[])
{
printf("%d \n",sizeof(int)); // 4
printf("%d \n",sizeof(char)); // 1
printf("%d \n",sizeof(short)); // 2
printf("%d \n",sizeof(long)); // 4
printf("%d \n",sizeof(long long)); // 8
printf("%d \n",sizeof(float)); // 4
printf("%d \n",sizeof(double)); // 8
}
char
char a = 'a';
char b[] = "abcef"; // 实际上会在结尾放置一个'\0',是"abcef\0",实际长度是6
char c[5] = {'a','b','c','d','e'}; //实际长度是5 没有'\0'
strlen("abc"); //返回 3,求字符串长度的一个函数,从第一个字符开始计算,直到碰到'\0', string.h
int
int a = 7 / 2; // 3参与运算的两个数字都是int的时候,按照整数运算,如果有一个浮点数,就进行浮点数运算
float
float a = 1.0 / 2.0;
printf("%f \n",a); // 0.5000
printf("%.1f \n",a); // 0.5
printf("%.2f \n",a); // 0.50
double
double d = 1.0;
scanf("%lf",&d);
printf("%lf",d);
接收输入:
整数类型:
int:%d
short:%hd
long:%ld
long long:%lld
字符类型:
char:%c
浮点类型:
float:%f
double:%lf
long double:%Lf
浮点数易错点
// 当使用scanf函数接受参数时候,double必须是%lf , float必须是 %f 二者不能混用
// 当使用printf函数输出时候,double和float 均可以使用%f %lf %.f %.1f %.2f
#include "stdio.h"
int main(int argc, char const *argv[])
{
double d;
float a;
scanf("%lf",&d); // 100
scanf("%f",&a); //100
printf("%f \n",d); // 100.000000
printf("%f \n",a); // 100.000000
printf("%lf \n",d); // 100.000000
printf("%lf \n",a); // 100.000000
printf("%.f \n",d); // 100
printf("%.f \n",a); // 100
printf("%.1f \n",d); // 100.0
printf("%.1f \n",a); // 100.0
printf("%.2f \n",d); // 100.00
printf("%.2f \n",a); // 100.00
return 0;
}
字符串常用函数
sprintf
#include <stdio.h>
int main() {
char str[100];
int num = 123;
sprintf(str, "Hello World %d", num); // 格式化文字赋值给str
printf("%s\n", str); // Hello World 123
return 0;
}
strcmp
#include "stdio.h"
#include "string.h"
int main(){
char str1[4] ="测试";
char str2[4] ="测试";
printf("%d",strcmp(str1,str2))
/*
str1<str1,返回为负数 注意不是-1
str1==str1,返回值= 0
str1>str1,返回正数 注意不是1
*/
}
操作符
算数操作符
+, -, *, /, %
参与取模运算的两个数字只能是整型
移位操作符
>>, <<
赋值操作符
=, +=, -=, *=, /=, &=, ^=, |=, >>=, <<=
define
#include "sdtio.h"
#define ADD(x,y) ((x) + (y))
int main(){
int a = 10;
int b = 20;
int c = ADD(10,20); // 这里是将ADD(10,20) 替换成了((10) + (20))
printf("%d",c);
}
枚举
enum Dat {
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
int main() {
enum Day d = Fri;
return 0;
}
文件读写
//写入文件
#include <stdio.h>
int main(int argc, char const *argv[])
{
FILE * file = fopen("C:\\Users\\ReturnZero\\Desktop\\test.txt","w");
if (file != NULL)
{
char i = 'a';
for(i = 'a'; i <='z'; i++){
fputc(i,file);
}
}
// 关闭文件
fclose(file);
file = NULL;
return 0;
}
// 读取文件
#include <stdio.h>
int main(int argc, char const *argv[])
{
FILE * file = fopen("C:\\Users\\ReturnZero\\Desktop\\test.txt","r");
int low = 0;
int update = 0;
if (file != NULL)
{
int c = 0;
while (c != EOF)
{
c = fgetc(file);
if (c >= 'a' && c <= 'z' )
{
low++;
}
if(c >= 'A' && c <= 'Z'){
update++;
}
}
printf("大写字母%d个,小写字母%d个",update,low);
}
// 关闭文件
fclose(file);
return 0;
}
// 写一行数据
FILE * file = fopen("test.txt","w")
fputs("hello \n",file);
// 读一行数据
char arr[20];
fgets(arr,5,file); //读到的是“hell" 因为会在末尾加一个'\0'
struct Student {
char mame[12];
int age;
};
//格式化输出
struct Student * student = malloc(sizeof(struct Student));
fprintf(file,"姓名:%s,年龄:%d",student->name,student->age);
//格式化输入
fscanf(file,"姓名:%s,年龄:%d",student->name,&(student->age))
| 参数 | 含义 |
|---|
| "r" | read 读 |
| "w" | write 写 |
| "a" | read/update 为了读和写新建一个文件 |
| "r+" | write/update 为了读和写打开一个文本文件 |
| "a+" | append/update |
| "rb" | 为了输入数据,打开一个二进制文件 |
| "ab" | 为了输出数据,打开一个二进制文件 |
| | |
| 功能 | 函数名 | 适用于 |
|---|
| 字符输入函数 | fgetc | 所有输出流 |
| 字符输出函数 | fputc | 所有输出流 |
| 文本行输入函数 | fgets | 所有输出流 |
| 文本行输出函数 | fputs | 所有输出流 |
| 格式化输入函数 | fscanf | 所有输出流 |
| 格式化输出函数 | fprintf | 所有输出流 |
| 二进制输入 | fread | 文件 |
| 二进制输出 | fwrite | 文件 |
fgetc
#include "stdio.h"
int main(int argc, char const *argv[])
{
FILE * file = fopen("read.txt","r");
if (file == NULL)
{
return 1;
}
char c ;
while ( (c = fgetc(file)) != EOF ) //按字符来读取
{
printf("%c",c);
}
return 0;
}
fputc
#include "stdio.h"
int main(int argc, char const *argv[])
{
FILE * file = fopen("read.txt","w");
if(file == NULL)
{
printf("Error");
return 0;
}
char ch = 'a';
while (ch <= 'z')
{
fputc(ch++,file);
}
fclose(file);
return 0;
}
fgets
#include "stdio.h"
int main(int argc, char const *argv[])
{
FILE * file = fopen("read.txt","r");
if (file != NULL)
{
char string[20];
while ( (fgets(string, 20, file)) != NULL)
{
printf("%s", string);
}
fclose(file);
}
return 0;
}
fpus
#include "stdio.h"
int main(int argc, char const *argv[])
{
FILE * file = fopen("read.txt","w");
if (file != NULL)
{
fputs("这是一段文字",file);//写入文件
fclose(file);
}
return 0;
}
fscanf
#include <stdio.h>
int main() {
FILE * file = fopen("read.txt","r");
if (file != NULL)
{
char string[100];
while (fscanf(file,"%s",string) != EOF)
{
printf("%s",string);
}
}
return 0;
}
fprintf
#include "stdio.h"
int main(int argc, char const *argv[])
{
FILE * file = fopen("read.txt","w");
fprintf(file,"这是一段文字,它的长度是 %d",10);
fclose(file);
return 0;
}
fwrite && fread
#include "stdio.h"
int main(int argc, char const *argv[])
{
FILE * file = fopen("read.txt","rb");
if(file != NULL)
{
int nums[10] = {0};
for (int i = 0; i < 10; i++)
{
scanf("%d",&nums[i]);
}
fwrite(nums,sizeof(int),10,file); //写入
int readnums[10] = {0};
fread(readnums,sizeof(int),10,file);//读取
for (int i = 0; i < 10; i++)
{
printf("%d ",readnums[i]);
}
fclose(file);
}
return 0;
}
关于数组
void method (int **matrix);
int main(){
int matrix[3][3] = {0};
method(matrix); // 错误 无法传递,类型不同
method((int**)matrix) //错误 可以传递,但是函数中无法使用
}
void method (int **matrix,int rows,int clos);
int main(){
int ** matrix = malloc(sizeof(int*) * 3);
for(int i = 0; i < 3; i++){
method[i] = malloc(sizeof(int) * 3);
}
method(matrix,3,3);// 正确 这样可以传递
}
void method (int rows,int cols,int matrix[rows][cols]);
int main(){
int matrix[3][3] = {0};
method(3,3,matrix);// 正确 也可以这样
}
Comments | NOTHING