cin和cout进阶

cin和cout进阶

本节介绍cin和cout更多的用法,并对比cin,cout和printf,scanf的区别

  • cin,cout是对象,有数据成员和成员函数。比如cin对象还有cin.get()方法

    而printf和scanf仅是函数

  • cin和cout输入输出数据的写法比scanf和printf简单一些,但也意味着它不能直接做到对数据的输入输出做到灵活的控制。

    比如 pi = 3.1415926,我想要保留2位小数输出pi怎么办?

    c语法很容易做到:printf(“%.2d”,pi);而cout似乎对此一筹莫展。

    其实iomanip头文件就可以帮我们解决cout控制输出格式的问题

    iomanip,io代表输入输出,manip是manipulator(操纵器)的意思

    举个栗子

    #include<iostream>
    #include<iomanip>
    using namespace std;
    
    int main() {
        double PI = 3.141592;
        cout << PI << endl; // 默认全部输出 3.141592
        cout << setprecision(2) << PI << endl;  //保留两位有效数字 3.1
        cout << fixed << setprecision(2) << PI << endl;  //保留两位小数 3.14 
        return 0;
    }
    

    单独的setprecision(n) 表示保留n位有效数字,fixed和setprecision(n) 结合使用表示保留n位小数

    你还可以设置字段宽度以及使用科学计数法表示

    #include<iostream>
    #include<iomanip>
    using namespace std;
    
    int main() {
        double PI = 3.141592;
        cout << setfill('*') << setw(20) << PI << endl;
        cout << setfill('*') << setw(20) << left << PI << endl;
        /*
          输出:
           *************3.14159
           3.14159*************
          说明:
           setfill(n):设置字符填充,n可以是字符常量或字符变量
           setw(n):设置字段宽度为n位
           left表示数据左对齐,不加left表示右对齐
        */
        cout << scientific << PI << endl;
        cout << scientific << uppercase << PI << endl;
        /*
          输出:
           3.141592e+00
           3.141592E+00
          说明:
           scientific表示将数据按科学计数法显示
           uppercase表示科学计数法表示中E会大写
        */
        return 0;
    }
    
    

    更多有关iomanip的内容,请自行在网上查阅资料

  • 输入输出进制转换

    cin和cout还可以输入和输出八进制和十六进制数;这时要设置转换基数的操作符dec,hex和oct。其中dec把转换基数设置成十进制,hex把转换基数设置成十六进制,oct把转换基数设置成八进制。

    #include<iostream>
    using namespace std;
    
    int main() {
        int x = 25;
        cout << hex << x << " " << dec << x << " " << oct << x << endl;
        // 输出 19 25 31
        retrn 0;
    }
    
  • cin不能读取空格,换行符

    试想一下这个程序:

    #include<iostream>
    using namespace std;
    
    int main() {
        char ch;   // ch表示玩家的按键
        cin >> ch;   // 读取玩家的按键
        cout << int(ch);   // 打印玩家按键的ASCll码值
        return 0;
    }
    

    你可能希望通过按 空格 来发射子弹,但是运行程序后,无论你怎么按空格和回车(回车键确认输入),程序始终没有输出。这是因为cin忽略了空格和换行符,只有读到其他字符才会让程序继续进行。

    不过不用担心,我们可以用 cin.get() 这个函数来解决这个问题。它类似于 getchar();

    #include<iostream>
    using namespace std;
    
    int main() {
        char ch;
        ch = cin.get();
        // 也可以这样使用: cin.get(ch);
        cout << int(ch);
        return 0;
    }
    
  • cin,cout效率比scanf和printf低

    // 验证cout输出比printf慢
    #include<iostream>
    using namespace std;
    #include<ctime>
    #include<cstdio>
    int main() {
        clock_t start1 = clock();
        for (int i = 0; i <= 10000; i++) {
            cout << i<<'\n';
        }
        clock_t end1 = clock();
        
        clock_t start2 = clock();
        for (int i = 0; i <= 10000; i++) {
            printf("%d\n",i);
        }
        clock_t end2 = clock();
        
        cout << "cout use time: " << end1 - start1 << endl;    // cout use time: 3463
        cout << "printf use time: " << end2 - start2 << endl;  // printf use time: 262
        // 可见cout输出比printf慢十几倍
        return 0;
    }
    

    scanf比cin快的验证需要些文件操作的知识,我们暂且放过。

    不过,cin也是有方法提速的,比如使用魔法代码: std::ios::sync_with_stdio(false);

    更详细的内容可以看 探寻C++最快的读取文件的方案

    记不住魔法代码完全可以就用scanf和printf来输入输出,当然在输入输出的数据量很大时才考虑这样做。还有一种更快的读取整数的代码(快读算法):只需用getchar即可

    int quickRead() {
        int res = 0, flag = 1;
        char ch = getchar();
        // 跳过非数字字符并判断符号
        while (ch < '0' || ch>'9') { 
            if (ch == '-')flag = -1; ch = getchar(); 
        }
        // 读取所有数字并且合并为一个整数
        while (ch >= '0' && ch <= '9') {
            res = res * 10 + ch - '0';
            ch = getchar();
        }
        return res * flag;
    }
    

    相信你也能写出自己的快写算法,用putchar就行。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 答:可以使用以下语句:#include <iostream> using namespace std; int main() { int number; cout << "输入一个数字:"; cin >> number; cout << "您输入的数字是:" << number << endl; return 0; } ### 回答2: 使用cincout可以用于输入和输出数据。下面是一个例子,使用cin来接收用户输入的数字,并用cout来输出该数字的平方值。 ``` #include <iostream> using namespace std; int main() { int num; cout << "请输入一个整数:"; cin >> num; int square = num * num; cout << "该数的平方是:" << square << endl; return 0; } ``` 以上代码先提示用户输入一个整数,然后使用cin来读取该整数的值并存储到num变量中。接着,计算该整数的平方值并存储到square变量中。最后,使用cout输出结果。 ### 回答3: 使用cincout可以用于输入输出的简化和格式化操作。cin用于从标准输入设备(通常是键盘)读取用户输入的数据,而cout用于向标准输出设备(通常是屏幕)输出数据。 下面是一个使用cincout的例子,将输入的两个数相加并输出结果: ```cpp #include <iostream> int main() { int num1, num2; std::cout << "请输入两个整数:" << std::endl; std::cin >> num1 >> num2; int sum = num1 + num2; std::cout << "两个数的和为:" << sum << std::endl; return 0; } ``` 以上代码中,首先使用cout向屏幕输出提示信息,然后使用cin从键盘读取两个整数,并将读取的值存储在变量num1和num2中。接着,将num1和num2相加得到sum,并使用cout将结果输出到屏幕上。最后,返回0表示程序正常结束。 通过使用cincout,我们可以方便地行标准输入输出的操作,使得代码更加简洁易读。同时,cincout还支持格式化输入输出,如设置输出精度、格式化输出日期和时间等,使得程序的输出结果更符合需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值