scanf()函数的输入基于获取“单词”,如果使用%s格式,字符串以第一个非空白字符开始读入,读到(但不包括)下一个空白字符(可以是空格、制表符或者换行符)。使用scanf()把一个字符串读进一个字符数组时,不使用&。scanf()函数返回成功读入项目的个数,若没有任何合乎要求的项目读入,scanf()返回0,当它检测到文件结尾时,返回EOF(#define指令把EOF的值定义为-1)。
使用格式:
char str[20]; scanf("%s",str);
gets()函数输入基于获取“字符串”,从字符串的第一个字符开始读入,读到第一个“\n”(换行字符)字符。即,读取换行符之前(不包括换行符)的所有字符,在这些字符后添加一个空字符(\0),然后把这个字符串读进一个字符数组。它将读取换行符并将其丢弃,这样下一次读取从新的一行开始。gets()函数返回一个指向char的指针,返回的指针与传递给它的是同一指针。gets()函数实际的构造比较复杂,因为它有两个可能的返回值。如果读入顺利,返回读入字符串的地址;如果出错或者gets()函数遇到文件结尾,它就返回一个空(或0)地址,这个空地址即空指针,用stdio.h中的常量NULL来表示。
由于gets()不检查目标数组是否能容纳输入,所以很不安全。
使用格式:
char str[20]; char *ptr; ptr = gets(str);
gets()函数构造:
char *gets(char *s){ …… return(s); }
fgets()函数与gets()不同在于它需要第二个参数来说明最大读入数,参数为n,则fgets()就会读取最多n-1个字符或者读完一个换行符为止,两者最先满足要求的那一个来结束读入。fgets()读取到换行符,就会把它存到字符串里,而不是像gets()那样丢弃它。它由第三个参数来说明读哪一个文件,stdin代表从键盘读入。
使用格式:
char *str; char *ptr; ptr = fgets(str,20,stdin);
getchar()函数没有参数,它返回来自输入设备的下一个字符,putchar()打印它的参数。这两个函数通常在stdio.h中定义,通常是预处理宏,而非真正的函数。可以利用循环将字符依次读入到字符串数组,getchar()可以接收换行符,因此需要在循环读入的过程中消除换行字符。
char s[20]; int n=0; while(1){ s[n]=getchar(); // 读入1个字符 if (s[n]=='\n') break; // 如果是换行符,则结束循环;相当于清除缓存中输入确定的换行符 n++; }
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。