4996错误(VS系列的毛病)
1.#pragma warning(disable:4996)//多次声明,头文件添加(可复制,vs粘贴的)
2._CRT_SECURE_NO_WARNINGS//设置的预处理添加 , 一次性,在IDE的设置里找
空字符为换行符(键盘enter键 ,/n), 制表符(键盘tab键 ,/t) , 空格
scanf
格式scanf(“X”,&Y);X为输入的数据类型,Y为被输入的变量,注意&, 是变量的地址
跳过空字符, 以第一次非空字符开始输入
字段结尾结束, 空字符结束 , 另外不符合输入标准的字符也会被跳过
不满足输入条件的字符会被存入栈中, 待下次输入读入(如果不处理好栈的关系会影响输入)。
Scanf返回成功读取的项数 , 不是字符数
Scanf丢弃换行符 , 存入输入流;
转换说明这里不具体说明了(%c, %d,%ld, %o, %p………)麻烦,自己找
转义序列也自己找 \a \b \v \n \t \r \f \? \0oo \xhh
注意:
1.
scanf(“%d, %d”,&n, &m);和
scanf(“%d, %d” , &n, &m);
两个scanf虽然看似相同但是
第一个%d紧跟一个逗号,只能在输入一个数字后紧跟一个逗号 , 不可接空字符 ,逗号之后随意
第二个%d逗号前有空格所以可以任意 , 只要两数有逗号 , 随意添加空格
总之输入格式最好要符合规定
如果两个%d%d紧贴,需要有空字符或制表符分隔 或一个一个输入回车。
2.
用scanf输入单字符时要注意
Scanf(“%c”,&c);
Scanf(“%c”,&ch);
第一次输入字符后回车 ‘/n’被留着栈中, 下次输入直接从栈中读取‘/n’ , 后结束了输入
解决方法while(ch =(getChar()) !=‘\n’)continue;
‘*’抑制符, 跳过不输入相应的值
scanf("%*s %*s %s", ch);
跳过前几次输入 以空格为分割 , 根据“%*s %*s %s”里的格式 , 最后一次为输入的值
数字 :最大字段宽度
Scanf(“s”,ch);
只能输入10个字符
[] :规定输入的字符
1.[^#]:以指定的字符为结束
#为指定的字符
例scanf(“%[^\n]”, ch);只有以换行符结束 ,
%[^n]以字符结束
%[^1]以数字1结束 , (1其实是字符,自己想想)
2.[x-y]:在规定的范围输入
Scanf(“%[0-9]”, &ch);
输入的字符在0到9之间 , 开头必须为数字
Prinf
说明:输出字符
格式printf(“%s”,c);
修饰符:
标记( -空格 #和 0)
‘-’:左对齐从字段左侧打印
‘ ’:显示符合 , 为正显示‘ ’号,为负显示‘-’号
‘ ’:若符合为正在值前显示前导空格 , 若为负值前显示减号
‘#’:在值前显示进制标记
‘0’:前导0代替空格填充字段
%*.*:*为数字 , 前一个为字段宽度, 后一个为小数位数
若修饰的是字符串%*.*s则前一个为字段宽度 , 后一个为打印的字数 , 右对齐
注意:
若
Printf()是以堆栈的形式打印;
例:
int i = 10; int l = 12 ;
Printf(“%f , %f”, I , l);
显示的为乱码或是其根据截断的数据 , 二进制转化而成的数字(一个三层蛋糕 , 本来应该一刀一层 , 但是错误的切了一层半)
gets
char *gets(char *str)
处理字符串,不处理数字
丢弃换行符 ,存入输入流, 添加‘/0’
处理整行字符串, 遇到只换行符退出(和scanf(“%[^\n]” , &ch);类似)
(vs 2019里面没有了gets, 可能被蠕虫病毒吃了)
典型用法:gets(word)word为字符数组 (字符数组和字符常量有区别的 , 《c和指针》)
警告:输入的字符串过长会导致缓冲区溢出
puts
int gets(const char *string)
原本和gets为一起的, (在vs可用)
输出字符串 , 在末尾自动添加换行符(printf(“\n”));
fgets
gets的替换函数
char * fgets(char *buf,int size,File *fp);
从输入流(fp)中获取规定的数目(size)的字符到字符串(buf)中
遇到换行或EOF(-1)停止
输入流:stdin(键盘输入)输出流:stdout
注意:
若输入的大小大于等于规定的数目,则不自动添加换行
若输入的大小小于 , 则自动添加换行
fputs
和fgets使用
Char *fputs(char *string,FILE * fp)
将字符串输出到输出流中
fputs不自动添加换行符
单字符处理
int getc(FILE *fp)
从流中读取字符
int putc(int ch,FILE *fp)
打印字符
int fgetc(FILE *fp)
从流中读取字符
int fputc(int ch,FILE *fp)
打印字符
以上都可以用于文件处理或字符处理
fprintf和fscanf
fprintf(FILE *fp, “转换说明“ , char *string)
fscanf(FILE *fp, “转换说明“ ,char *string)
fprintf是输出到文件或屏幕
fscanf是文件输入到字符
sprintf
sprintf(char *string, “转换说明“ ,char * string1,char *string2,char *string3…)
将数据写入字符
fread和fwrite
size_t fwrite(const void *restrict ptr , size_t size , size_t nmemb , FILE *restrict fp)
把二进制数据写入文件 ,size为数据块大小,nmemb为数量
Size_t fread(void *restrict ptr , size_t size , size_t nmemb , FILE *restrict fp)
将二进制文件写入字符
无缓冲输入
#include <conio.h>
getche()回显无缓冲 屏幕显示
getch()无回显无缓冲 屏幕不显示
cin cout
cout<<输出流
cin <<输入流
换行符
cout <<endl;(using namespace std;)
或
cout << ‘\n’;
cout是智能的,可以根据情况自动输出字符
cout << num;(num为int)输出num的值,而不是num
拼接
cout << string1 << string2 << string3 << string4;
cin,cout为类在iostream中定义
cout.put();(cout的成员函数)
输出字符;
例如cout.put(97)输出a
cin.getline(数组 , 字符数);
行输入,遇到回车结束输入, 丢弃换行
Cin.get(数组,字符数)
行输入 , 遇到回车结束输入 , 保存换行
Cin.get(char &) cin.get(void)
在使用char参数或没有参数情况下 ,get()方法读取下一个字符 , 即使为空格,制表符 , 换行符
StringI/O类#include <string>
getline(cin,str);
cin作为参数 ,str为string类型
cin.write(const char * str , streamsize n);
第一参数为显示字符串的地址 , 第二个为要显示多少个字符串
进制
cin << hex ;十六进制
cin << dec ;十进制
cin << oct ;八进制
二进制:#include<bitset> cout<< bitset<sizeof(num) * 8>(num)num为数
8为字节可自行设置
cout.width();
设置字段宽度 , 只影响下一次输出
cout.fill();
填充字符
cout.precision();
设置精度
_______________________________________________________________
cout.setf(1,2);
第二个参数 第一个参数
ios_base::basefield ---- ios_base::dec十进制
ios_base::oct八进制
ios_base::hex十六进制
ios_base::floatfield---- ios_base::fixed定点计数
ios_base::scientific科学计数法
ios_base::adjustfield--- ios_base::left左对齐
ios_base::right右对齐
ios_base::internal符合或基数前缀左对齐值右对齐
__________________________________________________________________
文件I/O
Oftream写入文件
Ifstream读取文件
Fstream写入或读取
创建ofstream对象或iftream对象
例:fstream file(“a.txt”,mode);
Mode:ios_base::in “r”
Ios_base::out “w”
Ios_base::out|ios_base::trunc”w”
Ios_base::out|ios_base::app“a”
Ios_base::in | ios_base::out“r ”
Ios_base::in |ios_base::out |ios_base::trunc“w ”
二进制读写
File.write((char *)&p , sizeof pl);
将字符串p的pl字节数写入文件
File.read((char *) & p , sizeof pl);
将文件的数据写入p,字节数pl