getchar() & putchar() 函数
int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。
int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。
char *gets(char *s) & int puts(const char *s)
函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。
int puts(const char *s) 函数把字符串 s 和一个尾随的换行符写入到 stdout。
gets()与fgets()
linux系统下需要这样编译:不支持 gets 与 puts, 需要用 fgets 和 fputs。
gets()
gets函数原型:chargets(charbuffer);//读取字符到数组:gets(str);str为数组名。
gets函数功能:从键盘上输入字符,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。
读取的换行符被转换为null值,做为字符数组的最后一个字符,来结束字符串。
注意:gets函数由于没有指定输入字符大小,所以会无限读取,一旦输入的字符大于数组长度,就会发生内存越界,
从而造成程序崩溃或其他数据的错误。
fgets()
fgets函数原型:char *fgets(char *s, int n, FILE *stream);//我们平时可以这么使用:fgets(str, sizeof(str), stdin);
其中str为数组首地址,sizeof(str)为数组大小,stdin表示我们从键盘输入数据。
fgets函数功能:从文件指针stream中读取字符,存到以s为起始地址的空间里,直到读完N-1个字符,或者读完一行。
注意:调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加’\0’,并以str作为函数值返回。
scanf() 和 printf() 函数
int scanf(const char *format, …) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。
int printf(const char *format, …) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。
当可能输入空行时,C用gets(char a[]),C++用getline(cin,string a)
%03d表示显示为三位十进制数,d表示十进制数,3表示显示长度,0表示不足三位的前补0
scanf读入一个字符避免读入上一个换行符
scanf()读取单个字符的时候,如果上面的语句也有scanf, 可能会读入换行符,导致读取的字符不是自己写入的字符。
如果用scanf(“%c”,&ch),那么程序不会忽略为了输入而按下的回车键操作,而是认为回车键是后续操作而继续响应;
而scanf(“ %c”, &ch)在%c之前空格会告诉scanf忽略前面的空行,而等待第一个非空行元素读入其中。这样就能避免问题的出现。
输入输出重定向
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
字符串和数字之间的互相转换:sprintf和sscanf
sprintf( buffer," String: %s\n", s );
给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,
先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);
printf("%s\n", buf);
结果为:12DDWDFF
给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)
sscanf(“hello, world”, "%*s%s", buf);
printf("%s\n", buf);
结果为:world
C语言有atoi、atol、atof等库函数,可分别把ASCII编码的字符串转化为int、long、float类型的数字。头文件:stdlib.h函数原型:int atoi(const char* nptr);(另外两个类似)例子:char *str=”123”;int num=atoi(str);执行后,num的值被初始化为123
Windows、Unix、Mac不同操作系统的换行问题 回车符\r和换行符\n
一、概念:
换行符’\n’和回车符’\r’
(1)换行符就是另起一行 — ‘\n’ 10 换行(newline)
(2)回车符就是回到一行的开头 — ‘\r’ 13 回车(return)
所以我们平时编写文件的回车符应该确切来说叫做回车换行符
CR: 回车(Carriage Return) \rLF: 换行(Line Feed) \n
二、应用:
(1)在微软的MS-DOS和Windows中,使用”回车CR(‘\r’)”和”换行LF(‘\n’)”两个字符作为换行符;
(2)Windows系统里面,每行结尾是 回车+换行(CR+LF),即”\r\n”;
(3)Unix系统里,每行结尾只有 换行LF,即”\n”;
(4)Mac系统里,每行结尾是 回车CR 即’\r’。
Mac OS 9 以及之前的系统的换行符是 CR,从 Mac OS X (后来改名为”OS X”)开始的换行符是 LF即’\n’,和Unix/Linux统一了。
三、影响:
(1)一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;
(2)而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
(3)Linux保存的文件在windows上用记事本看的话会出现黑点。
四、可以相互转换:
在linux下,命令unix2dos 是把linux文件格式转换成windows文件格式,命令dos2unix 是把windows格式转换成linux文件格式。
在不同平台间使用FTP软件传送文件时, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化.
如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本。
一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件。