在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈

1.scanf("%s",str)和gets(str)

scanf("%s",str)和gets(str)均可用于输入字符串到字符数组变量str,但scanf("%s",str)只读到输入字符的空格或回车处,而gets(str)读到回车处结束,所以当句子中单词由空格分开时要用后者来输入,如下图所示:

需要强调一点,scanf("%s",str)在遇到'\n'(回车)或' '(空格)时输入结束,但'\n'(回车)或' '(空格)停留在出入缓冲区,如处理不慎会影响下面的输入;gets(str)遇到'\n'(回车)时输入结束,但'\n'(回车)已被替换为'\0',存储于字符串中,输入缓冲中没有遗留的'\n'(回车),不会影响后续的输入。测试程序的代码为:

代码如下:

View Code

#include<iostream>
#include<stdio.h>

using namespace std;

int main()
{
  //freopen("//home//jack//jack.txt","r",stdin);
  char str[80];
  char ch;
  cout<<"1、请输入一个没有空格的字符串:"<<endl;
  scanf("%s",str);
  cout<<"用scanf(\"%s\",str)输入的字符串为:"<<str<<endl;
  cout<<"再输入一次作为对比:"<<endl;
  while((ch=getchar())!='\n'&&ch!=EOF);
  gets(str);
  cout<<"用gets(str)输入的字符串为:"<<str<<endl;
  cout<<"2、请输入一个有空格的字符串:"<<endl;
  scanf("%s",str);
  cout<<"用scanf(\"%s\",str)输入的字符串为:"<<str<<endl;
  cout<<"再输入一次作为对比:"<<endl;
  while((ch=getchar())!='\n'&&ch!=EOF);
  gets(str);
  cout<<"用gets(str)输入的字符串为:"<<str<<endl;
  return 0;
}

其中while((ch=getchar())!='\n'&&ch!=EOF);是处理输入缓存中的遗留的办法;fflush(stdin)方法对某些编译器不适用,不是标准C支持的函数。

2、printf(“%s”,str)和puts(str)

先看如下代码:

代码如下:

View Code

#include<iostream>
#include<stdio.h>

using namespace std;

int main()
{
  //freopen("//home//jack//jack.txt","r",stdin);
  char str1[80]="hello";
  cout<<"用printf(\"%s\",str1)输出的字符串为:";
  printf("%s",str1);
  cout<<"用puts(str1)输出的字符串为: ";
  puts(str1);
  char str2[80]="hello world";
  cout<<"用printf(\"%s\",str2)输出的字符串为: ";
  printf("%s",str2);
  cout<<"用puts(str2)输出的字符串为: ";
  puts(str2);
  return 0;
}

从运行结果可以看出,printf(“%s”,str)和puts(str)均是输出到'\0'结束,遇到空格不停,但puts(str)会在结尾输出'\n',printf(“%s”,str)不会换行。printf(“%s\n”,str)可以替换puts(str)。

完。

(0)

相关推荐

  • C++输入输出操作符重载的深入分析

    操作符的重载有一些规则: 1. 重载操作符必须具有一个类类型或枚举类型操作数.这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义.如:int operator+(int, int), 不可以    2. 为类设计重载操作符的时候,必须选择是将操作符设置为类成员还是普通非成员函数.在某些情况下,程序没有选择,操作符必须是成员:在另外一些情况下,有些经验可以指导我们做出决定.下面是一些指导:a. 赋值(=),下标([]),调用(())和成员访问箭头(->)等操作符必须定义为成员,将这些

  • C语言格式化输入输出函数详解

    一:格式输出函数printf() 1.调用形式一般为:printf("格式化控制字符串",输出表列): 2.格式化控制字符串用于指定输出格式,它有三种形式: 1.格式说明符:规定了相应输出表列内容的输出格式,以%打头,如%d.%o等 2.转义字符:用来输出转义字符所代表的控制代码或者特殊字符,比如常用的'\n'.'\t' 3.普通字符:需要原样输出的字符. 3.输出表列为若干需要输出的数据项,它与格式说明符在数量和类型上一一对应: 4.格式字符m指定输出数据所占宽度,n对实数表示输出n

  • 详解C++编程中的输入输相关的类和对象

    C++输入和输出的概念 我们经常用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.除了以终端为对象进行输入和输出外,还经常用磁盘(光盘)作为输入输出对象,磁盘文件既可以作为输入文件,也可以作为输出文件. 程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件. C++输入输出包含以下三个方面的内容: 对系统指定的标准设备的输入和输出.即从键盘输入数据,输出到显示器

  • 在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈

    1.scanf("%s",str)和gets(str) scanf("%s",str)和gets(str)均可用于输入字符串到字符数组变量str,但scanf("%s",str)只读到输入字符的空格或回车处,而gets(str)读到回车处结束,所以当句子中单词由空格分开时要用后者来输入,如下图所示: 需要强调一点,scanf("%s",str)在遇到'\n'(回车)或' '(空格)时输入结束,但'\n'(回车)或' '(空格)

  • c++中cin/cout与scanf/printf的区别比较

    cin .cout 基本说明: cin代表标准输入设备,使用提取运算符 ">>" 从设备键盘取得数据,送到输入流对象cin中,然后送到内存. cin是输入流,cout是输出流,重载了">>"."<<"运算符,包含在头文件<iostream>中. 先把要输出的东西存入缓冲区,再输出,导致效率降低,cin是自动判断你的变量类型,比如一个char数据只能用默认的char方法取数据. scanf .prin

  • c语言获取用户输入字符串是scanf和gets的区别详解

    解释 gets(s)函数与 scanf("%s",&s) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止. 1.scanf() 所在头文件:stdio.h 语法:scanf("格式控制字符串",变量地址列表); 接受字符串时:scanf("%s",

  • 浅谈Python 字符串格式化输出(format/printf)

    Python 字符串格式化使用 "字符 %格式1 %格式2 字符"%(变量1,变量2),%格式表示接受变量的类型.简单的使用例子如下: # 例:字符串格式化 Name = '17jo'   print 'www.%s.com'%Name   >> www.17jo.com Name = '17jo' Zone = 'com' print 'www.%s.%s'%(Name,Zone) >> www.17jo.com 字符串格式化时百分号后面有不同的格式符号,代表

  • 当自定义数据属性为json格式字符串时jQuery的data api问题探讨

    jQuery 的 data API 实现方式有缓存数据的效果 使用 IE 7 (IE8+ 在控制台切换至IE7 模式),当DOM 节点有自定义数据属性时,检查 DOM 节点即可看到 形如 jQuery18305664906559272507 的属性,这便是 用于从数据存储对象中获取自定义数据的建. 当自定义数据属性是一个 json 格式字符串时,缓存的数据如果被修改, 则修改后的数据继续存在于缓存系统中, 如果不留意,这可能导致一些BUG 复制代码 代码如下: <!DOCTYPE HTML>

  • JavaScript拆分字符串时产生空字符的解决方案

    问题描述 使用JavaScript的split方法拆分字符串时出现一些空字符串"",尤其是当使用正则表达式作为分隔符的时候. 相关问题 javascript正则表达式对字符串分组时产生空字符串组? 在上面这个问题中,题主使用正则表达式对字符串进行分割时产生了多个空字符串"",代码如下: 复制代码 代码如下: '张sdf四上法asdf翁芬aa33网s'.split(/([\u4e00-\u9fa5]{1})/gi); //输出["", "

  • java拼接字符串时去掉最后一个多余逗号的方法

    本文实例讲述了java拼接字符串时去掉最后一个多余逗号的方法.分享给大家供大家参考.具体分析如下: 先看下面这段代码: for (int t = 0; t < memberLen; t++) { memTemp = stafferMap.get(strMember[t]); if(memTemp != null){ memberNames += memTemp + ","; } } 以上的代码,拼接的字符串会多一个",",比如:"str1,str2,

  • Python 存储字符串时节省空间的方法

    从 Python 3 开始,str 类型代表着 Unicode 字符串.取决于编码的类型,一个 Unicode 字符可能会占 4 个字节,这个有些时候有点浪费内存. 出于内存占用以及性能方面的考虑,Python 内部采用下面 3 种方式来存储 Unicode 字符: 一个字符占一个字节(Latin-1 编码) 一个字符占二个字节(UCS-2 编码) 一个字符占四个字节(UCS-4 编码) 使用 Python 进行开发的时候,我们会觉得字符串的处理都很类似,很多时候根本不需要注意这些差别.可是,当

  • MySQL解决Navicat设置默认字符串时的报错问题

    目录 简介 问题复现 原因分析 解决方案 简介 说明 本文介绍用Navicat添加字段(字符串类型)并设置默认值时的报错问题. 问题描述 在Java开发过程中,经常会遇到给已有的表添加字段的场景. 在插入新字段的时候,表里边可能已经有很多数据了,这时我们最好给新插入的字段设置一个默认值,这样MySQL就会将已经存在的数据的新加字段设置为默认值.设置默认值可以增加系统的可维护性. 但我在给已有的表插入新字段(字符串类型)的时候发现报错了,本文介绍如何解决这个问题. 报错信息 1064 - You

  • 使用JSON.toJSONString格式化成json字符串时保留null属性

    目录 JSON.toJSONString格式化成json字符串时保留null属性 属性说明 例子 处理返回结果中字段为空或为null,不展示字段的问题(字段展示不全) JSON.toJSONString格式化成json字符串时保留null属性 使用阿里的 com.alibaba.fastjson.JSON 格式化时,默认null属性会被过滤掉,可以设置不过滤null public static String parseScriptJsonStringWithNullValue(Object ob

随机推荐