gets();getschar();fget();

gets():

原型:char *gets(char *buffer) ;

功能:从stdlin中获取获取字符串一直到换行符或者遇到EOF为止,但换行符不被录取,会将换行符替换成‘\0’来表示字符串的结束

返回值:如果读取成功会返回buffer指针,如果遇到EOF或者发生错误会返回NULL,当遇到NULL需要调用ferror()和feof()来判断是遇到EOF还是发生了错误

ps:该函数读取一直读到遇到换行符为止,所以很容易发生溢出的情况,如果发生溢出,会覆盖堆栈中的内容,改变不相关的变量,我们可以使用fget()替换gets(),为了向后兼容,不会将换行符放入缓冲区中。

[cpp]  view plain copy
  1. #include "stdio.h" //这个头文件包含gets()函数  
  2. int main()  
  3. {  
  4.     char str1[15];  
  5.     gets(str1);  
  6.     printf("%s\n", str1);  
  7.     getchar() ;  
  8.     return 0;  
  9. }  
此时就可以从键盘上读取一个字符串到str1中

ps:scanf("%s", str1) ;这样也可以输入字符串,如果遇到空格符就会认为字符串结束了,空格后的字符作为下一个字符串,但gets()会遇到换行符为止

*****************************

getchar():

功能:这个函数由宏#define getchar() getc(stdin) 从标准输入中读取字符,等待用户输入字符串一直到换行符为止,用户输入的字符将会存入键盘缓冲区中包括换行符,他会读取第一个字符,返回第一个字符的ASCII码,getchar()会从缓冲区中读取剩下的字符一直到读完为止,然后等待如果输入换行符

ps:getch()和getchar()差不多,但getch()在用户输入后就立即返回了不等待用户输入换行符,会返回输入字符的ASCII码,如果错误就-1,这个经常用于调试中

[cpp]  view plain copy
  1. #include <string>  
  2. #include <iostream>  
  3. int main()  
  4. {  
  5.     int c ;  
  6.     int a ;  
  7.     a = getchar() ;  
  8.     while((c = getchar()) != '\n')  
  9.     {  
  10.         printf("%c", c) ;  
  11.     }  
  12.     getchar() ;  
  13.     return 0 ;  
  14. }  
输出:

可以看出他是从缓冲区中获取剩下的字符的。


fgets():

函数原型:char *fgets(char *buf, int bufsize, FILE *stream);

从文件结构指针stream中读取数据,每次读取bufsize-1个数据,第bufsize个赋值成'\0',如果不足bufsize个数据则返回,如果遇到eof或者错误则返回Null,如果成功就返回buf地址

[cpp]  view plain copy
  1. #include <string.h>  
  2. #include <stdio.h>  
  3. #include <iostream>  
  4. int main()  
  5. {  
  6.     FILE *stream;  
  7.     char string[] = "Love, I Have\nSince you can do it.";  
  8.     char msg[20];  
  9.     /* 
  10.     *FILE * fopen(const char * path,const char * mode); 
  11.     *以w+的方式:以读写的方式打开,如果有文件则清零,没有则要新建一个新的 */  
  12.     stream = fopen("DUMMY.txt""w+");  
  13.     /* 
  14.     *size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream); 
  15.     *buffer:代表要写入的数据 
  16.     *size:写入每项的字节数 
  17.     *count:写入的项数 
  18.     *stream:要写入的字节流 
  19.     */  
  20.     fwrite(string, strlen(string), 1, stream);  
  21.     /* 定位到文件的开始 */  
  22.     fseek(stream, 0, SEEK_SET);  
  23.     fgets(msg, 6, stream);//此时文件指针会第六个字符  
  24.     printf("%s\n", msg);  
  25.     fgets(msg, 20, stream);  
  26.     printf("%s", msg);  
  27.   
  28.     fseek(stream, 0, SEEK_SET);  
  29.     fgets(msg, 23, stream);  
  30.     printf("%s", msg);  
  31.     fclose(stream);  
  32.   
  33.   
  34.     system("pause") ;  
  35.     return 0;  
  36. }  
执行结果为:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值