永发信息网

c语言中gets ,getschar 和fgets 的用法及三者之间的差别

答案:6  悬赏:20  手机版
解决时间 2021-03-04 09:53
  • 提问者网友:树红树绿
  • 2021-03-03 12:31
c语言中gets ,getschar 和fgets 的用法及三者之间的差别
最佳答案
  • 五星知识达人网友:怙棘
  • 2021-03-03 13:16
gets——从标准输入接收一串字符,遇到'\n'时结束,但不接收'\n',把 '\n'留存输入缓冲区;把接收的一串字符存储在形式参数指针指向的空间,并在最后自动添加一个'\0'。
getchar——从标准输入接收一个字符返回,多余的字符全部留在输入缓冲区。
fgets——从文件或标准输入接收一串字符,遇到'\n'时结束,把'\n'也作为一个字符接收;把接收的一串字符存储在形式参数指针指向的空间,并在'\n'后再自动添加一个'\0'。

简单说,gets是接收一个不以'\n'结尾的字符串,getchar是接收任何一个字符(包括'\n'),fgets是接收一个以'\n'结尾的字符串。
全部回答
  • 1楼网友:山君与见山
  • 2021-03-03 17:04
gets字符串getchar单字符fgets文件操作
  • 2楼网友:由着我着迷
  • 2021-03-03 16:22
C语言中gets,getchar,fgets的用法如下: #include main() //gets,getchar用法 { char str[30]; int c; printf("Input a string:"); gets(str); printf("The strint input was:%s\n",str); while((c=getchar())!='\n')printf("%c",c); } #include #include main() { FILE *stream; char str[]="this is a test"; char msg[20]; stream=fopen("temp.dat","w+"); fwrite(string,strlen(string),1,stream); fseek(stream,0,SEEK_SET); fgets(msg,strlen(string)+1,stream); printf("%s",msg); fclose(stream); }
  • 3楼网友:躲不过心动
  • 2021-03-03 14:45
gets函数可以无限读取就是读一个字符串,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。 没有getschar只有getchar,这个函数的意思是从stdio流中读字符,相当于getc(stdin),它从标准输入里读取下一个字符。就是读入一个字符。 fgets是文件流操作符。用法是从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
  • 4楼网友:零点过十分
  • 2021-03-03 14:08
gets用于输入一串字符,可以输入空格,输入完毕gets会自动给输入的字符串后面补'\0';头文件string.h。 getchar用于输入单个字符,单句getchar()还有清空输入缓存的作用。头文件stdio.h。 fgets用于从文件中读取一串字符,读取到的个数由传入参数决定,另外fgets读取的时候遇到'\n'也会停止。头文件stdio.h。
  • 5楼网友:从此江山别
  • 2021-03-03 13:56
gets(): 原型:char *gets(char *buffer) ; 功能:从stdlin中获取获取字符串一直到换行符或者遇到EOF为止,但换行符不被录取,会将换行符替换成‘\0’来表示字符串的结束 返回值:如果读取成功会返回buffer指针,如果遇到EOF或者发生错误会返回NULL,当遇到NULL需要调用ferror()和feof()来判断是遇到EOF还是发生了错误 ps:该函数读取一直读到遇到换行符为止,所以很容易发生溢出的情况,如果发生溢出,会覆盖堆栈中的内容,改变不相关的变量,我们可以使用fget()替换gets(),为了向后兼容,不会将换行符放入缓冲区中。 [cpp] view plaincopy #include "stdio.h" //这个头文件包含gets()函数 int main() { char str1[15]; gets(str1); printf("%s\n", str1); getchar() ; return 0; } 此时就可以从键盘上读取一个字符串到str1中 ps:scanf("%s", str1) ;这样也可以输入字符串,如果遇到空格符就会认为字符串结束了,空格后的字符作为下一个字符串,但gets()会遇到换行符为止 ***************************** getchar(): 功能:这个函数由宏#define getchar() getc(stdin) 从标准输入中读取字符,等待用户输入字符串一直到换行符为止,用户输入的字符将会存入键盘缓冲区中包括换行符,他会读取第一个字符,返回第一个字符的ASCII码,getchar()会从缓冲区中读取剩下的字符一直到读完为止,然后等待如果输入换行符 ps:getch()和getchar()差不多,但getch()在用户输入后就立即返回了不等待用户输入换行符,会返回输入字符的ASCII码,如果错误就-1,这个经常用于调试中 [cpp] view plaincopy #include #include int main() { int c ; int a ; a = getchar() ; while((c = getchar()) != '\n') { printf("%c", c) ; } getchar() ; return 0 ; } fgets(): 函数原型:char *fgets(char *buf, int bufsize, FILE *stream); 从文件结构指针stream中读取数据,每次读取bufsize-1个数据,第bufsize个赋值成'\0',如果不足bufsize个数据则返回,如果遇到eof或者错误则返回Null,如果成功就返回buf地址 [cpp] view plaincopy #include #include #include int main() { FILE *stream; char string[] = "Love, I Have\nSince you can do it."; char msg[20]; stream = fopen("DUMMY.txt", "w+"); fwrite(string, strlen(string), 1, stream); fseek(stream, 0, SEEK_SET); fgets(msg, 6, stream);//此时文件指针会第六个字符 printf("%s\n", msg); fgets(msg, 20, stream); printf("%s", msg); fseek(stream, 0, SEEK_SET); fgets(msg, 23, stream); printf("%s", msg); fclose(stream); system("pause") ; return 0; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯