PAT 之C++部分输出问题 printf/cout/fgets

一、有关printf输出string字符串类型的问题

1.printf函数输出字符串是针对char *的,即printf只能输出c语言的内置数据,而string不是c语言的内置数据。

2.string类型的对象不止包含字符串,还包含了许多用于操作的函数,所以&str并非字符串的首地址。

3.如需输出string对象中的字符串,可以使用string的成员函数c_str(),该函数返回字符串的首字符的地址。


4.正确格式:(注意头文件为#include<string>)

                       string s = “hahaha”;

                       printf(“%s” , s.c_str());//string中c_str()成员方法返回当前字符串的首字符地址

以上参考自:① https://blog.csdn.net/zhanshen112/article/details/84719344

                        ② https://blog.csdn.net/linghugoolge/article/details/82595277

                        ③ https://blog.csdn.net/li_l_il/article/details/84196587

5.    c中的printf和c++中的cout完成的功能一样,都是输出
        书写格式不一样
         1. 格式不同int a=6; cout<<a<<endl; printf("%d\n",a)
       2.printf需要你告诉它格式(int %d, double %f,char %c)
        cout不需要
        另外
        1.printf是函数。cout是ostream对象,和<<配合使用。
        2.printf是变参函数,没有类型检查,不安全。cout是通过运算符重载实现的,安全。
        3.如果printf碰到不认识的类型就没办法了,而cout可以自己重载进行扩展。
        4.有时候printf比cout灵活。
        c++中也能使用printf,但是c中不能使用cout
        也可以这么说:c++可以完全兼容c的用法,反过来就不行 

注:参考例子:PAT B1002 写出这个数 (20 分)    https://blog.csdn.net/weixin_44312186/article/details/88742661

二、简单地说说 fgets() 和 gets()

1、首先看看函数原型:

char* fgets(char *s, int n, FILE *stream);
char* gets(char *s);

一般使用fgets函数,都是读取文件当中的n-1个字符到s中,其实,此函数还有一个很好的用处就是从标准输入流中读取字符串,而且不用担心输入的字符个数超出了字符数组的大小而导致溢出的问题!要怎样做呢?如下:


char    str[10];
fgets(str, siezof(str), stdin);


而如果使用gets函数的话,就不能保证上述的问题不会出现(输入的字符个数超出了字符数组的大小而导致溢出)  不信你可以运行下面的代码:

char    str[10];
gets(str);


当然你得输入10个以上的字符才能看到问题
到这里,fgets()的好处就不用再详细说了。值得注意的是:谨记fgets()只读取n-1个字符。所以,fgets()读取到换行符、文件尾或读完n-1个字符便会进行返回

2、另需参考 https://blog.csdn.net/CrazyOnes/article/details/81562139

以及(PAT B1002 写出这个数 )   https://blog.csdn.net/weixin_44312186/article/details/88742661

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值