精华内容
下载资源
问答
  • scanf输入字符串gets输出字符串的区别 下面看一个例子: 代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int i; char a[20]; scanf("%s",a); int len=...

    scanf输入字符串与gets输出字符串的区别

    下面看一个例子:
    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
     int i;
     char a[20];
     scanf("%s",a);
     int len=strlen(a);//测量字符串长度的函数 
     for(i=0;i<len;i++)
     printf("%c",a[i]);
     return 0; 
    }

    测试结果如下:
    在这里插入图片描述
    由此可以看出使用scanf输出字符串时如果输入的有空格,其只能接受空格前面部分的内容,空格后面的(包括空格)都不能接收到。

    在看一个例子:
    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
     int i;
     char a[20];
     gets(a);
     int len=strlen(a);//测量字符串长度的函数 
     for(i=0;i<len;i++)
     printf("%c",a[i]);
     return 0; 
    }

    测试结果如下:
    在这里插入图片描述
    由此看以看出使用gets输入字符串的时候可以接受到空格空格后面的内容。

    以上问题很简单,是我写代码的时候发现的一个小问题,希望可以帮助到大家,大家有啥好的方法希望能不吝赐教一下,感激不尽。

    展开全文
  • 在C语言中存在两种字符串输入方法:第一种:gets()函数--程序1---1 #include 2 #include 3 int main()4 {5 int i;6 char str[20];7 for (i=0; i<20; i++)8 {9 str[i] = 'a';10 }11 gets(str);12 prin...

    在C语言中存在两种字符串输入方法:

    第一种:gets()函数

    --程序1---

    1 #include

    2 #include

    3 int main()

    4 {

    5     int i;

    6     char str[20];

    7     for (i=0; i<20; i++)

    8     {

    9         str[i] = 'a';

    10     }

    11     gets(str);

    12     printf("字符串str长度:%d\n", strlen(str));

    13     printf("打印字符串:%s\n", str);

    14     for (i=0; i<20; i++)

    15     {

    16         printf("第%d个字符:%c\n", i+1, str[i]);

    17     }

    18     return 0;

    19 }

    第二种:scanf()函数

    --程序2-----------

    1 #include

    2 #include

    3 int main()

    4 {

    5     int i;

    6     char str[20];

    7     for (i=0; i<20; i++)

    8     {

    9         str[i] = 'a';

    10     }

    11     scanf("%s", str);

    12     printf("字符串str长度:%d\n", strlen(str));

    13     printf("打印字符串:%s\n", str);

    14     for (i=0; i<20; i++)

    15     {

    16         printf("第%d个字符:%c\n", i+1, str[i]);

    17     }

    18     return 0;

    19 }

    如果输入:hello回车

    --程序1输出------------

    字符串str长度:5

    打印字符串:hello

    第1个字符:h

    第2个字符:e

    第3个字符:l

    第4个字符:l

    第5个字符:o

    第6个字符:

    第7个字符:a

    第8个字符:a

    第9个字符:a

    第10个字符:a

    第11个字符:a

    第12个字符:a

    第13个字符:a

    第14个字符:a

    第15个字符:a

    第16个字符:a

    第17个字符:a

    第18个字符:a

    第19个字符:a

    第20个字符:a

    --程序2输出---------

    字符串str长度:5

    打印字符串:hello

    第1个字符:h

    第2个字符:e

    第3个字符:l

    第4个字符:l

    第5个字符:o

    第6个字符:

    第7个字符:a

    第8个字符:a

    第9个字符:a

    第10个字符:a

    第11个字符:a

    第12个字符:a

    第13个字符:a

    第14个字符:a

    第15个字符:a

    第16个字符:a

    第17个字符:a

    第18个字符:a

    第19个字符:a

    第20个字符:a

    如果输入:hello空格world回车

    --程序1输出----------------

    字符串str长度:11

    打印字符串:hello world

    第1个字符:h

    第2个字符:e

    第3个字符:l

    第4个字符:l

    第5个字符:o

    第6个字符:

    第7个字符:w

    第8个字符:o

    第9个字符:r

    第10个字符:l

    第11个字符:d

    第12个字符:

    第13个字符:a

    第14个字符:a

    第15个字符:a

    第16个字符:a

    第17个字符:a

    第18个字符:a

    第19个字符:a

    第20个字符:a

    --程序2输出--------------

    字符串str长度:5

    打印字符串:hello

    第1个字符:h

    第2个字符:e

    第3个字符:l

    第4个字符:l

    第5个字符:o

    第6个字符:

    第7个字符:a

    第8个字符:a

    第9个字符:a

    第10个字符:a

    第11个字符:a

    第12个字符:a

    第13个字符:a

    第14个字符:a

    第15个字符:a

    第16个字符:a

    第17个字符:a

    第18个字符:a

    第19个字符:a

    第20个字符:a

    分析:对于scanf()会过滤空格,不接受空格后面的字符。但gets()会接受。2个函数在给变量赋值时都会将

    字符串最后一位变为'\0'。例如上面输入  hello回车  后,第6个字符打印时不显示,其实是'\0'这个字

    符,这个字符在屏幕上打印不出来。如果我们输入一串超过20个的字符串,程序运行时会显示错误。

    那么如何能让scanf()能接受空格呢?可以在scanf()进行格式控制

    展开全文
  • “若是一个字符串读入程序,首先要预留存储该字符串的空间”目录数组gets()函数和puts()函数gets()函数读取整行输入,直至遇到换行符,而后丢弃换行符,存储其他字符,并在这些字符末尾添加一个空字符,使其成为一个...

    “若是一个字符串读入程序,首先要预留存储该字符串的空间”

    目录数组

    gets()函数和puts()函数

    gets()函数读取整行输入,直至遇到换行符,而后丢弃换行符,存储其他字符,并在这些字符末尾添加一个空字符,使其成为一个C字符串。blog

    #include

    char *gets( char *str );

    puts()函数显示字符串,并在末尾添加换行符,成功返回非负值,失败返回EOF。puts(words)至关于printf("%s\n",words)字符串

    #include

    int puts( char *str );

    /*示例程序*/

    #include

    int main()

    {

    char s[100];

    gets(s);

    puts(s);

    return 0;

    }

    fb9c24abf9b6311ae36fa2171f057307.png

    可是!!!gets()惟一的参数是数组名words,并不知道数组的长度。get

    数组名表明数组首元素的地址,所以gets()只知道数组的开始出,并不知道数组中有多少个元素。若是输入的字符串过长会致使缓冲区溢出。io

    所以,坚定禁止使用gets();class

    fgets()函数和fputs()函数

    该函数专门用于处理文件输入。

    fgets()函数的第2个参数指明了读入字符的最大数量。若是该参数是n,那么fgets()读入n-1个字符,或者遇到第一个换行符为止。若是fgets()函数读到一个换行符,会把换行符存储在字符串中(和gets()区别)。

    fgets()函数的第3个参数指明要读入的文件。若是是从键盘输入,将stdin(标准输入)做为参数。

    fgets()函数返回指向char的指针。若是正常读入,返回的地址和传入的第1个参数相同。若是读入异常,返回空指针(C语言中用宏NULL来表示)

    #include

    char *fgets( char *str, int num, FILE *stream );

    fputs()函数,它不会在末尾添加换行符。若是是从屏幕输入,将stdout(标准输出)做为参数。

    #include

    int fputs( const char *str, FILE *stream );

    /*循环读入用户输入的内容,直至fgets()读到文件结尾*/

    #include

    while(fgets(words,10,stdin)!=NULL)

    /*示例输出程序*标准输入输出*/

    #include

    int main()

    {

    char s[100];

    fgets(s,100,stdin);

    fputs(s,stdout);

    return 0;

    }

    输出以下:

    ec2a11ec630ed1111aa203f654af6e2d.png

    输出解释:fgets()一次读入“Hello World!”并存储为“Hello World!\n”

    接着fputs()打印该字符串,而且未换行。

    如何处理掉换行符?

    遍历字符串,遇到换行符,并将其替换成空字符。遇到空字符,就丢弃输入行剩余的字符。

    为何要丢弃过长输入行中的余下字符?

    输入行中多出来的字符会被留在缓冲区中,成为下一次读取语句的输入。

    /*读取整行输入并用空字符代替换行符,或者读取部分输入,并丢弃其他部分*/

    char * s_gets(char *st,int n)

    {

    char *ret_val;

    int i=0;

    ret_val = fgets(st,n,stdin);

    if(ret_val!=NULL)

    {

    while(st[i]!='\n' && st[i]!='\0')

    i++;

    if(st[i]=='\n')

    st[i]='\0';

    else

    while(getchar()!='\n')

    continue;

    }

    return ret_val;

    }

    gets_s()函数

    gets_s()只从标准输入中读取数据,因此不须要第三个参数。而且gets_s()读到换行符会丢弃它而不是存储它。

    若是gets_s()读到最大字符数都没有读到换行符,会执行如下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至读到换行符或者文件结尾,而后返回空指针。接着,调用依赖实现的“处理函数”,可能会停止或退出程序。

    以上的特性说明,只要输入行未超过最大字符数,gets_s()和gets()几乎如出一辙,彻底能够替换!

    scanf()函数

    scanf()有两种方法肯定输入结束:%5s,读取5个字符或者读到第一个空白中止。

    e178709809835fd9ac5322b3d746b8f7.png

    展开全文
  • 1、输入输出一个字符串 #include <stdio.h> #include <stdlib.h> int main() { char str1[50]; gets(str1); puts(str1); return 0; } 2、输入输出一个字符串数组 #include <stdio.h> #...

    1、输入输出一个字符串

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char str1[50];
        gets(str1);
        puts(str1);
        return 0;
    }
    
    

    2、输入输出一个字符串数组

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char str2[10][50];
        printf("请输入3个字符串:\n");
        for(int i=0;i<3;i++){
            gets(str2[i]);
        }
        printf("3个字符串为:\n");
        for(int i=0;i<3;i++){
            puts(str2[i]);
        }
        return 0;
    }
    
    

    3、gets注意点:
    gets会识别换行符 \n 为一个字符串的输入结束标志
    gets获取一个字符串之后识别字符串后面的换行符 \n,并将其丢弃,不会留在缓冲区
    因为scanf在读入一个数据后,会把末尾的回车,换行符 \n 留在缓冲区
    所以,如果后面紧接着gets读入字符串会识别 \n 为一个完整字符串

    错误示例:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int n;
        char str2[10][50];
        printf("请输入一个整数:\n");
        scanf("%d",&n);         /*这里用了scanf进行输入,缓冲区会有\n遗留*/
        printf("请输入3个字符串:\n");
        for(int i=0;i<3;i++){
            gets(str2[i]);     /*这里识别了前面scanf遗留的 \n,所以获取的第一个字符串是空字符串,*/
        }
        printf("3个字符串为:\n");
        for(int i=0;i<3;i++){
            puts(str2[i]);
        }
        return 0;
    }
    
    

    在这里插入图片描述
    解决方法:
    用getchar将换行符 \n 吃掉
    正确示例:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int n;
        char str2[10][50];
        printf("请输入一个整数:\n");
        scanf("%d",&n);
        printf("请输入3个字符串:\n");
        getchar();    /*添加getchar将前面scanf遗留的 \n 吃掉*/
        for(int i=0;i<3;i++){
            gets(str2[i]);
        }
        printf("3个字符串为:\n");
        for(int i=0;i<3;i++){
            puts(str2[i]);
        }
        return 0;
    }
    
    

    在这里插入图片描述

    展开全文
  • 主要用到字符串输入scanf/gets 字符串赋值、比大小等知识。 1.查找书籍 习题9-4 查找书籍 (20 分) 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。 输入格式: 输入第一行...
  • 函数【4】功能:从stdin流中读取字符串,直至接受到换行符或EOF时中止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不做为读取串的内容,读取(接受)的换行符被转换为null值,并由此来结束字符串。spa...
  • 字符串输入函数gets()

    千次阅读 2019-05-26 10:40:33
    在前面讲过键盘输入函数 scanf 和 %s.其实还有更简单的方法,就是使用 gets() 函数,该函数的原型为: #include<stdio.h>...gets()函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量...
  • scanf虽然也能输入字符串,但是遇到空格就停止了。 解决方法: 目的:输入的字符串可以有空格,且,会检测是否溢出,如果溢出,将其截断。 也可以设置你想要获取的字符个数,将超出此范围的字符截断...
  • 其实在《C语言输入输出》一章中我们已经提到了如何输入输出字符串,但是那个时候我们还没有讲解字符串,大家理解的可能不透彻,所以本节我们有必要再深入和细化一下。字符串的输出在C语言中,有两个函数可以在控制台...
  • C语言的字符串输入gets()函数

    千次阅读 2020-06-26 21:13:23
    C语言的字符串输入gets()函数 字符串简介 字符串(character string)是一个或多个字符的序列。如下所示: "Zing went the strings of my heart!" 双引号不是字符串的一部分。双引号告知编译器它括起来的是字符串。...
  • C语言的字符串输入函数gets_s()

    千次阅读 2020-06-26 21:11:33
    C语言的字符串输入函数gets_s() C11新增了gets_s()函数(可选),和fgets()函数类似(上一篇博客有介绍《 C语言的字符串输入fgets()函数 》),用一个参数限制读入的字符数。gets_s()函数的形式如下: gets_s(words...
  • 许多ACMer在做ACM题时经常会被一些字符串输入搞混,如果...今天把C语言中的三个字符串输入函数(scanf,gets,fgets)深入分析一下,以至于不要让太多ACMer字符串输入的阴沟里翻船。(只讨论在命令行中的标准输入
  • 不同点:scanf用%d输入数字或用%s输入字符串时,在开始读之前会跳过空格、回车或制表符等空白字符,再次遇到这些字符时,系统认为读入结束,因此不能输入带空格的字符串。未读取到的被留在了输入缓冲区中。 gets...
  •  gets函数功能:从键盘上输入字符,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。  读取的换行符被转换为null值,做为字符数组的最后一个字符,来结束字符串。  注意:ge
  • 输入字符串的方式

    千次阅读 多人点赞 2019-05-19 17:15:27
    C++中常用的几种输入字符串的方式 1.scanf scanf如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理 #include <cstdio> using namespace std; int main (){ char s[100]; scanf("%s",s); ...
  • 在C++中输入字符串

    2017-12-10 21:39:06
    在C++中输入字符串的五种方法: 1、cin 1、cin.get() 2、cin.getline() 3、getline() 4、gets() 5、getchar()
  • C语言字符串输入及输出的几种方式

    万次阅读 多人点赞 2018-02-06 00:12:56
    1.字符串数组+初始化 char s1[]="array"; //字符数组 char s2[6]="array"; //数组长度=字符串长度+1,因为字符串末尾会自动添‘\0‘ printf("%s,%c\n",s1,s2[2]); //array,r 2.字符串指针+初始化 char *sp=...
  • 【问题描述】输入一个字符串,再用指针引用法完成字符串的逆序 【输入形式】 【输出形式】 【样例输入输出】 源一 #include<stdio.h> #include<string.h> int main() { char a[80]; int y; printf(...
  • C++中输入字符串的几种方法

    万次阅读 多人点赞 2018-08-26 17:19:39
    C++中常见的几种输入字符串方法如下: cin、cin.get()、cin.getline()、getline()、gets()、getchar() 1. cin&gt;&gt; 用法一:最常用、最基本的用法,输入一个数字: #include &lt;iostream&...
  • C++如何输入字符串

    千次阅读 2019-08-11 09:56:00
    1、cin输入字符串,这是最简单,也是最有效的方法,如果没有特殊说明,可以每次都选择这种方法输入字符串。 2、scanf输入字符串,定义一个数组char str[100],然后以字符串的方式用scanf输入到这个数组里面。(注意...
  • 字符串: C语言中最有用、最重要的数据类型之一。 字符串:是以\0字符结尾的char类型数组。所以可以把数组和指针知识应用于...如果要在字符串内部使用引号,必须要在双引号前面加上一个反斜杠(\)。 字符串字面量...
  • C++ 输入字符串

    2019-06-12 11:15:54
    C++ 输入字符串 方法一:cin >> str; 此方法在读取时,会自动忽略开头的空白,并从第一个真正的字符开始读起,直到遇见下一处空白为止。 #include <iostream> #include <string> using namespace...
  • #include&lt;stdio.h&gt;  int a;  char str[10000];  int main()  {  scanf("... {gets(str);  puts(str);  a--;  }  return 0;  }  gets:以回车为结束 注意:此处scanf...
  • C语言的scanf()函数在接收输入单个字符时会把上一次输入的回车符号当做这次输入的字符,造成无法正确的输入字符数据。这恐怕是初学C的童鞋门遇到的最头疼的问题了。今天给大家提供四种解决方法供借鉴。 在scanf()...
  • C++输入字符串的几种方式

    万次阅读 多人点赞 2019-05-10 10:20:21
    最近有复习到 C++ 基础知识,这里总结下在 C++ 中输入字符串的几种方式,有需要的可以参考: 1、cin >> void Cin1() //输入一个数字 { int a, b; cin >> a >> b; cout << "a + ...
  • gets():获取一行数据,并作为字符串处理。 scanf() 是最灵活、最复杂、最常用的输入函数,上节我们已经进行了讲解,本节接着讲解剩下的函数,也就是字符输入函数和字符串输入函数。 输入单个字符 输入单个字符当然...
  • 常见的几种输入方法 cin,getchar(),cin.getline(有参数),getline(cin.s),cin.get(有参数),cin.get(无参数...用法二:接受一个字符串,遇“空格”、“Tab”、“回车”都结束 int a; char b[10]; long c; string d;
  • gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串。 调用格式为: gets(str); 其中str为字符串变量(字符串数组名或字符串指针)。 gets(str) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,558
精华内容 9,023
热门标签
关键字:

gets输入字符串的用法