gets_getstring - CSDN
gets 订阅
gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。 展开全文
gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。
信息
原    型
char * gets ( char * str );
外文名
gets
头文件
stdio.h(c),cstdio(C++)
中文名
读取字符串
功    能
读取字符串
gets功能
从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。 [1] 
收起全文
精华内容
参与话题
  • gets() 实战

    千次阅读 2019-02-13 16:01:05
    getsgets是用来输入一行字符串的,以“\n”识别输入结束,puts对应一行字符串输出。 用法 char str[100]; gets(str); puts(str); 实战 采用c++编译器提交出现 error: ‘gets’ was not declared in ...

    gets:

    gets是用来输入一行字符串的,以“\n”识别输入结束,puts对应一行字符串输出。

    用法

    char str[100];

    gets(str);

    puts(str);

    实战

    采用c++编译器提交出现

    error: ‘gets’ was not declared in this scope
     gets(str);

    原因分析:

    gets函数是C语言中stdio库中内容,语言改改?

    编译器选择c

    编译成功

    展开全文
  • gets函数

    千次阅读 2018-08-14 11:35:39
    #include<stdio.h> int main() { char str[30]; gets(str); puts(str); }
    #include<stdio.h>
    

    int main()
    {
    char str[30];
    gets(str);
    puts(str);
    }

    展开全文
  • gets()和getchar()的用法

    万次阅读 多人点赞 2018-06-05 23:39:22
    ----------------------------------------------------| 问题描述一:(分析scanf()和getchar()读取字符) |--------------------------------------------------scanf(), getchar()等都是标准输入函数,一般人...
    ----------------------------------------------------
    | 问题描述一:(分析scanf()和getchar()读取字符)   |

    --------------------------------------------------

    scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的。但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因。下面先看一个很简单的程序:

    程序1:

    1. int main()  
    2. {  
    3.        char ch1, ch2;  
    4.        scanf("%c", &ch1);   
    5.        scanf("%c", &ch2);  
    6.        printf("%d  %d\n", ch1, ch2);  
    7.        return 0;  
    8. }  
    程序2:

    1. int main()  
    2. {  
    3.        char ch1, ch2;  
    4.        ch1 = getchar();  
    5.        ch2 = getchar();  
    6.        printf("%d  %d\n", ch1, ch2);  
    7.        return 0;  
    8. }  

       程序的本意很简单,就是从键盘读入两个字符,然后打印出这两个字符的ASCII码值。可是执行程序后会发现除了问题:当从键盘输入一个字符后,就打印出了 结果,根本就没有输入第二个字符程序就结束了。例如用户输入字符'a', 打印结果是97,10。这是为什么呢?

    【分析】:
        首先我们呢看一下输入操作的原理, 程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中 取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子 中为什么会出现输入语句失效的原因!
        其实这里的10恰好是回车符!这是因为scanf()和getchar()函数是从输入流缓冲区中读取值的,而并非从键盘(也就是终端)缓冲区读取。而读 取时遇到回车(\n)而结束的,这个\n会一起读入输入流缓冲区的,所以第一次接受输入时取走字符后会留下字符\n,这样第二次的读入函数直接从缓冲区中 把\n取走了,显然读取成功了,所以不会再从终端读取!这就是为什么这个程序只执行了一次输入操作就结束的原因!


    ----------------------------------------------------
    |  问题描述二:(分析scanf()和gets()读取字符串)   |
    ----------------------------------------------------

    首先我们看一下scanf()读取字符串的问题:
    程序3:

    1. int main()  
    2. {  
    3.        char str1[20], str2[20];  
    4.        scanf("%s",str1);   
    5.        printf("%s\n",str1);      
    6.        scanf("%s",str2);    
    7.        printf("%s\n",str2);    
    8.        return 0;  
    9. }  

     程序的功能是读入一个字符串输出,在读入一个字符串输出。可我们会发现输入的字符串中不能出现空格,例如:
    测试一输入:
    Hello world!
    输出:
    Hello
    world!
    【分 析】到此程序执行完毕,不会执行第二次的读取操作!这个问题的原因跟问题一类似,第一次输入Hello world!后,字符串Hello world!都会被读到输入缓冲区中,而scanf()函数取数据是遇到回车、空格、TAB就会停止,也就是第一个scanf()会取出"Hello", 而"world!"还在缓冲区中,这样第二个scanf会直接取出这些数据,而不会等待从终端输入。

    测试二:
    Hello[Enter] 
    Hello[输出]
    world[Enter]
    world[输出]
    【分析】程序执行了两次从键盘读入字符串,说明第一次输入结束时的回车符被丢弃!即:scanf()读取字符串会舍弃最后的回车符!


    我们再看一下gets()读取字符串的情况:
    用scanf来读取一个字符串时,字符串中是不可以出现空格的,一旦出现空格,后面的数据就会舍弃残留在缓冲区中。其实有另外一个函数是可以接受空格的,那就是gets(),下面我们看一下这个函数的应用,我们把程序3改动一下:

    1. int main()  
    2. {  
    3.        char str1[20], str2[20];  
    4.        gets(str1);   
    5.        printf("%s\n",str1);      
    6.        gets(str2);    
    7.        printf("%s\n",str2);    
    8.        return 0;  
    9. }  

    【分析】显然与上一个程序的执行情况不同,这次程序执行了两次从键盘的读入,而且第一个字符串取了Hello world! 接受了空格符,而没有像上一个程序那样分成了两个字符串!所以如果要读入一个带空格符的字符串时因该用gets(), 而不宜用scanf()!


    --------------------------------------------------------
    | 问题描述三:(getchar()暂停程序,查看程序执行结果)|
    --------------------------------------------------------
        不知道大家有没有遇到过这样的问题,有的编译器程序执行完后的结果界面不会停下而是一闪就没了,以至于看不到执行结果。所以很多人在程序最后加上 getchar()语句,目的是想让程序执行完后停下来,等待从终端接收一个字符再结束程序。可是发现有时候这样根本没用,程序照样跳出去了。这是为什么 呢?
    【分析】原因跟上面例子讲的一样,是因为输入缓冲区中还有数据,所以getchar()会成果读到数据,所以就跳出了!

    ------------------
    |   【总结】   |
    ------------------

    第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!
    读取字符时:
    scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
    getchar()以Enter结束输入,也不会舍弃最后的回车符;
    读取字符串时:
    scanf()以Space、Enter、Tab结束一次输入
    gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!

    第二:为了避免出现上述问题,必须要清空缓冲区的残留数据,可以用以下的方法解决:
    方法1:C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!
           这个函数是fflush(stdin)。
    方法2:自己取出缓冲区里的残留数据。
    (说实话这个语句我也没看懂,呵呵!为什么格式控制是这样的!希望高手指点一下!)
           scanf("%[^\n]",string);

    转自大佬博客https://blog.csdn.net/zqixiao_09/article/details/50189477
    展开全文
  • 函数gets()的用法

    万次阅读 多人点赞 2019-04-16 09:05:38
    gets()函数和scanf()对比 先看代码: #include&amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;gt; int main(void){ char a1[10], a2[10],a3[10]; scanf( &amp;amp;amp;quot;%s%s&amp;amp;amp;quot;...

    gets()函数和scanf()对比

    先看代码:

    #include<stdio.h>
    int main(void){
    	char a1[10], a2[10],a3[10];
    	scanf( "%s%s",a1,a2);
    //gets(a2);
    	gets(a3);
    	puts(a1);
    	puts(a2);
    	puts(a3);
    //	printf("%s\n",ch1);
    //	printf("%s",ch2);
    	printf("end..."); 
    	return 0;
    }
    

    在这里插入图片描述
    再看一段代码:

    #include<stdio.h>
    int main(void){
    	char a1[10], a2[10],a3[10];
    	scanf( "%s",a1);
    	gets(a2);
    	gets(a3);
    	puts(a1);
    	puts(a2);
    	puts(a3);
    //	printf("%s\n",ch1);
    //	printf("%s",ch2);
    	printf("end..."); 
    	return 0;
    }
    

    在这里插入图片描述

    a. 可以看到a1中放的是joncy, scanf是用空格来结束的。 从结果中来看, scanf在读完之后空格还在缓冲区中。 而gets是接收空格的,所以第二张图中输出的 a2 前有空格存在。

    b. 从第一张图中, 还可以看出scanf也不识别回车, 同样也把回车留在了缓存区中。 而gets是接收回车的, 所以第一张图中的 a3 输出的是回车。

    看代码:

    #include<stdio.h>
    int main(void){
    	char a1[10],a2[10],a3[10],a4[10];
    	gets(a1);
    	gets(a2);
    	gets(a3);
    	gets(a4);
    	puts(a1);
    	puts(a2);
    	puts(a3);
    	puts(a4);
    	printf("end...")
    	return 0;
    }
    

    在这里插入图片描述
    c. 这个图可以看到,gets函数能够接收字符串, 而且不把回车符号留在缓存区中。

    #include<stdio.h>
    int main(void){
    	char a1[10];
    	gets(a1);
    	char c = getchar();
    	puts(a1);
    	printf("%c\n",c);
    	printf("end...");
    	return 0;
    }
    

    在这里插入图片描述

    #include<stdio.h>
    int main(void){
    	char a1[10],a2[10];
    	gets(a1);
    	char c = getchar();
    	puts(a1);
    	printf("%c\n",c);
    	scanf("%s",a2);
    	char c2 = getchar();
    	puts(a2);
    	printf("%c",c2);
    	printf("end...");
    	return 0;
    }
    

    在这里插入图片描述
    d. 要注意这里puts自己把回车符吸收了,所以要等待输入。但是scanf没有,所以c2是换行符。

    注:gets函数把字符串输出到标准输出设备,将’\0’转换为回车换行。但是scanf不会,末尾还是’\0’,且空格,换行或者tab都会留在缓存区。

    这是一段百度词条的代码:

    
    > #include <stdio.h>
    > #include <conio.h> int main(void) {
    >     int i;
    >     char string[20];
    >     for(i=0;i<10;i++)
    >         string[i]='a';
    >     puts(string);
    >     getch();
    >     return 0; }
    
    

    这是运行结果:
    在这里插入图片描述

    确实我们看到, gets看不到 ‘\0’ 是不会结束的。

    
    #include <stdio.h>
    #include <conio.h> 
    /*
    	字符串的末尾\0不会输出如果在%c的情况下 
    	gets()把换行符吸收转换成\0 
    */
    int main(void) {
         int i;
         char string[10];
    //     for(i=0;i<10;i++)
    //         string[i]='a';
    gets(string);
     for(i=0;i<10;i++)
         printf("%d",string[i]);
        // getch();
        return 0; 
    	}
    
    

    编程中遇到的问题:
    scanf("%s,%s",a1,a2); 千万不要这样写,字符串输入最好分开写,或者把逗号去掉。

    本文引用百度词条:https://baike.baidu.com/item/puts/4747927?fr=aladdin

    更多干货文章,编程资源,请关注公众号『Carry互联网笔记』
    在这里插入图片描述

    展开全文
  • gets函数用法

    千次阅读 2019-01-07 08:44:39
    gets是从标准输入设备读字符串函数。 函数原型:char * gets ( char * str ); 功能为:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取...
  • gets()函数

    千次阅读 2018-08-09 10:02:20
    gets()和puts()函数:gets()函数的简单易用,它读取整行输入,直至遇到换行符,然后丢弃换行符,储存其余字符,并在这些字符的末尾添加一个空字符使其成为一个C字符串.它通常与puts函数配对使用,该函数用于显示字符...
  • gets()函数详解和缺陷

    千次阅读 2014-04-19 22:50:23
    1.gets函数 1.1基本信息 原型:  char *gets( char *buffer); 功能:  gets函数从标准输入中读取一行文本,并存储于作为参数传递给它的数组中。一行文本由一串字符组成,以一个换行符('\n')结尾。在返回之前,...
  • gets()gets_s()puts()函数的使用

    万次阅读 2013-10-13 13:07:15
    从stdin流中读取字符串,直至接受到换行符或EOF时停止... gets 包含头文件  string.h  从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取
  • 1,scanf 这是我们最常见的函数,scanf是标准输入函数,使用形式:scanf(“%d”, &...gets()是在stdio.h中是输入函数,使用类型:gets(str)。 可以从标准输入类中读取一行字符到指定的字符串中,它在遇到E...
  • C语言gets_s, _getws_s函数了解

    万次阅读 多人点赞 2012-12-11 16:22:57
    gets_s 对应头文件 _getws_s对应头文件 or 原型: char *gets_s(char *buffer,size_t sizeInCharacters); wchar_t *_getws_s(wchar_t *buffer,size_t sizeInCharacters); 与gets函数类似。 _getws ...
  • VS2015提示gets未定义

    万次阅读 2020-05-26 21:14:33
    出现这种情况的一般原因是, VS2015使用的是新C标准,也就是C11,而VC6.0用的是老标准。 在新标准中,应该是用gets_s代替gets gets_s的具体用法是: gets_s(char *buff,size) ...
  • 解答:c语言中gets是什么意思

    万次阅读 2010-03-11 13:59:00
    gets用来读入一行字符(包括空格,遇到回车结束),读到某一个字符串指针所指向的一段空间函数名: gets功 能: 从流中取一字符串用 法: char *gets(char *string);程序例:#include int main(void){char string[80];...
  • gets的读入规则与返回值

    千次阅读 2011-11-04 21:57:05
    gets函数的读取规则: 1.只要gets遇到换行符,即便它是输入的第一个字符,gets也会停止读入并返回。如果输入的第一个字符就是换行符,则字符串将被置为空串。 2.由于gets函数读入再丢弃换行符,换行符将不会...
  • C++中 gets()函数

    万次阅读 多人点赞 2016-09-19 00:06:09
    gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。 功能 编辑 从stdio流中读取字符串,直至接受到换行符...
  • error C3861: “gets”: 找不到标识符

    千次阅读 2017-03-12 21:52:10
    error C3861: “gets”: 找不到标识符 把“gets”改成“gets_s”
  • fgets和gets的区别

    万次阅读 2012-09-07 12:36:01
    在编程中发现gets和fgets一些区别总结一下; 1、 fgets比gets安全,使用gets编译时会警告 为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,...
  • C语言 scanf()和gets()函数的区别

    万次阅读 多人点赞 2015-10-03 15:04:57
    C语言 scanf()和gets()函数的区别 1.相同点:scanf( )函数和gets( )函数都可用于输入字符串 2.不同点:两者在功能上有所区别,具体区别如下: 要实现如下需求“从控制台输入字符串”有如下两种实现方式: 1>...
  • 问题今天在LINUX下编译C程序时,出现了main.c:29:5: warning: implicit declaration of function ‘gets’ [-Wimplicit-function-declaration] gets(buffer); 和warning: the `gets' function is dangerous and ...
  • C语言gets函数了解

    万次阅读 2012-12-11 15:35:50
    函数gets的原型为:char*gets(char*buffer);  在 stdio.h中定义,如果要程序中用到此函数需包含#include gets()函数用来从标准输入设备(键盘)读取字符串直至接受到换行符或EOF时停止结束,并将读取的结果存放在...
  • 测试代码,删除字符串空格符: #include int main(void) { char a[100]; int i = 0, j = 0; printf("input:");... // gcc中 gets puts函数不能用!! stdin 键盘输入. for (i = 0; * (a + i) != '
1 2 3 4 5 ... 20
收藏数 241,941
精华内容 96,776
关键字:

gets