C语言输入输出总结

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(“%10s”,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

举报
评论 0