C语言之输入

一直想吐槽C语言那恶心的输入的,初学时大量时间都花在了处理输入数据的问题上,看人家的语言,输入多么简单,可是C容易出错,写起来还麻烦。虽然如此,但是C的效率还是没得说的。

输入的基础靠的是函数,根据不同数据情况选择不同的输入方式,有时也要考虑到数据结构选择适当的输入方式。

在此,好好分析一下C的输入函数:

首先输入的函数有:scanf,getc,getchar,gets,fgets,fgetc,fscanf等,输出是与之对应的printf,putc,putchar,puts,fputs,fputc,fprintf等。

scanf

相对来说对于有一定格式的数据一般采用scanf输入,函数原型是int scanf(const char *format, arg_list) 参数是为指定的参数格式及参数类型,相当于一种匹配,匹配控制台输入的所有东西。遵从最长匹配,只要之后的字符或数字等满足需要匹配的%*就会被匹配了去。

1.常常犯的错误是两个%1%2,%2的被%1给匹配掉了,所以出了错,举个例子:scanf("%s%c", &a, &b);就无法读入b。

2.读入的时候可以用空格略掉一个至多个空白字符。

3.scanf是以空格和回车作为结束匹配的标志,但是%c能读入空白字符,包括空格和回车,这个很容易犯错,没有读入的字符,输出时会看到很多很多“烫“。

4.scanf函数的返回值为成功赋值的个数,出错返回EOF。在写程序时,可以通过返回的参数来判断用户输入是否正确。

以上是我的一些心得,以后遇到再补充。

如果需要详细了解scanf函数所有用法,推荐scanf()函数详解

getc

函数原型:int getc(FILE *fp),功能是从文件读出一个字符。

1.常用于判断文件是否读完:(ch = getc(fp)) != EOF

2.当fp为stdin时,getc(stdin) 就等同于getchar()

getchar

getchar功能是从标准输入流读取一个字符。

1.并不是在屏幕中敲上一个字符程序就会运行,一般是通过在屏幕上敲上回车键,然后将回车前的字符串送至缓冲区中,getchar从缓冲区中一个一个的读字符。

2.可以在while循环中指定终止字符,例如:while ((c = getchar()) != '\r' && c != '\n')这是以回车来结束的。

gets

函数原型:char * gets(char *str),功能:从标准输入流读取字符串并回显。

1.读到换行符时退出,并会将换行符省去。

2.现在大多说gets有害论,不建议用gets,会造成溢出错误,常见于黑客攻击和反向工程。

3.现在用fges代替,但是不完全等同,fgets带换行符。

fgets

函数原型:char *fgets(char *str, int num, FILE *fp),参数说明:str是存放读入的字符数组指针,num是最大允许的读入字符数,fp是文件指针。功能:读一行字符,该行的字符数不大于num-1。

1.会在末尾加上一个空字符以构成一个字符串。

2.在读取到换行符后不会将其省略。

3.gets(s);相当于

fgets(s, sizeof(s), stdin);

if(s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = '\0'; // 去掉换行符

其实,末尾这个换行符是另有妙用的。

fgetc

函数原型:int fgetc(FILE *fp),功能:从fp的当前位置读取一个字符。

fscanf

函数原型:int fscanf(FILE *fp, char *format,...),功能:按照指定格式从文件中出读出数据,并赋值到参数列表中。参见scanf。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注