【转载】C++ scanf、printf。

 

最早学的是“cin>>…;”“cout<<…;”这样的输入输出流,但是再后来发现这个的速度实在是太慢了,于是就换用了C语言的"scanf"、"printf"进行输入输出,麻烦是麻烦了点,但是在时间上可以省很多。

 

好了,现在总结下用"scanf"、"printf"的注意事项【每一条都是眼泪啊】

 

这两个函数,都被定义在库"stdio.h"或者是"cstdio"里,所以在使用的时候应该先加上“#include <cstdio>”

 

Scanf:

scanf("格式控制",地址列表)

注意,这里说的是“地址列表”,并非是变量名,也就是说,要用的时候,要在变量名之前加上“&”符号

    例如:“scanf("%d",&n);” 

其中的 n 就是变量名,加上了“&”后就变成了地址列表了

 

如果想读入多个变量,就多加几个格式控制,地址列表就好了

例如:scanf("%d%d",&a,&b); 这是读入两个变量,输入如下图

  对C++的输入输出研究
 
但是需要注意的是,编写的时候,格式控制是不能乱打的,就像这样
多打了一个“,”就让输入格式变了
对C++的输入输出研究
 
对于字符串的读入,我们知道,scanf是不支持string的,所以要用字符数组"char a[…]"
但是在读入字符串的时候是遇到空格回车或者非法字符就自动停止的,就像下面这段代码
  char s[80];
  scanf("%s",&s);   
 
值得我们注意的是,虽然定义的是字符数组,但是我们照样可以用“%s”来控制直接读入一串字符串。
 
对于他的读入结果,应该是这样的
对C++的输入输出研究

但是我们“%[]”控制符来控制输入,这个参数的意义是读入一个字符集合。也就是说,放在[]里面的是一个集合,表示你的输入都在这个集合里,例如这个集合“%[A-Z]”就是只读入大写字母,一旦遇到不是大写的就停止读入,例如“输入:A3B  输出: A”
同时,最强的是这个集合的第一个字符如果是“^”,那么就是表示读到不是集合内的字符就停止读入了,利用这个我们可以读入一行字符串[基本上可以代替了用"getline"读入字符串]。
但是注意此时读入的字符串是可以含有空格的。

 

来试验一下
  scanf("%[^\n]",&s);   
 对C++的输入输出研究

这样就实现了整行的输入输出了。

为什么说要怀念readln呢,因为想要输入一个换行符是很难得,于是想换行读入就要这样做了,这个是自己想的,没有经过实践考验,不过应该是没有问题的

scanf("%d%*[^\n]%d",&a,&b);

“%*”的意思是指读入这个数据,但是不显示,也就是说,忽略掉,解释下上面的语句,就是首先读入变量a,然后再忽略掉这行剩下的东西,再读入b,翻译成pascal,应该类似于"readln(a); read(b);"

我自己实验的效果是这样的

对C++的输入输出研究

 

之所以这样写,其实是为了那些不想去用getline的人们【^_^比如说我】


当然,C是不兼容C++的,也就是说,这样是不能读入string类型的,只能用字符数组,不过,要是先把字符数组读进去,再赋值给string也是可以的,就像这样:

char a[100]; string s;
scanf("%s",buf);
s=a;


 

Printf:

这个的用法其实很简单,和scanf是一样的,但是不同的是

printf(格式控制,变量名)

也就是说,输出的时候变量名字前面就不用加入“&”了,同时有些技巧的东西,例如,在控制格式的时候,我们可以定义场宽,或者左右补空格,亦或是直接转换进制。

 const int a=12;
 const float c=12;
 printf("a is %d\n",a);     //普通输出
 printf("a is =\n",a);    //左补空格,直到长度为3位
 printf("a is %x\n",a);     //16进制输出
 printf("c is %3.4f\n",c);  //保留小数【不想左补空格可以直接写成 printf("c is %.4f\n",c); 】

输出结果为对C++的输入输出研究

 

 

 

嗯,关于Scanf和Printf的研究就这些,以后有新发现的话会继续补充,另如果有意见或建议请联系我哦

QQ:244249650


 另外,再附上一个格式控制的表

  %a,%A 读入一个浮点值(仅C99有效)

  %c 读入一个字符

  %d 读入十进制整数

  %i 读入十进制,八进制,十六进制整数

  %o 读入八进制整数

  %x,%X 读入十六进制整数

  %s 读入一个字符串,遇空格、制表符或换行符结束。

  %f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。

  %p 读入一个指针

  %u 读入一个无符号十进制整数

  %n 至此已读入值的等价字符数

  %[] 扫描字符集合

  %% 读%符号 
另外,自己研究的有一个%I64d  这个是long long在windows下的输出用法,据说在linux下应该是%lld

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值