C\C++输入输出

目录

C

C语言

1. 格式化输出函数printf

printf("格式化控制字符串",arg1,arg2,…,argN);

  
  
  • 格式化控制字符串包括两部分:格式字符串与非格式字符串(普通字符)。

    对于格式字符串:以 %号开头,用于定义每个数据的输出格式:

    符号描述
    d以十进制形式输出 带 符号整数(正数不输出符号)
    ld输出长整型数
    o以八进制形式输出 无 符号整数(不输出前缀0)
    x,X以十六进制形式输出 无 符号整数(不输出前缀0x)
    u以十进制形式输出 无 符号整数
    f以小数形式输出单、双精度实数
    lf按long double类型输出
    e,E以指数形式输出单、双精度实数
    g,G按数据精度以%f或%e中较短的输出宽度输出单、双精度实数
    c输出单个字符
    s输出字符串

    比如:printf("i= %f, d= %f\n",i,d);的输出结果为:i=1, d=3.14(回车换行)

    整数的格式化输出:

    % [对齐方式] [输出最小宽度] 整数类型
    
        
        
    • 对齐方式用默认为右对齐,若为"-"负号,则为左对齐;输出最小宽度n,若实际位数小于n,则补以空格或0.
      例如:%08d,右对齐,不足宽度补0;%-8d,左对齐,不足宽度补空。

      实数的格式化输出:

      % [输出最小宽度] [ . 精度] 实数类型
      
            
            
      • 最小宽度n,包括整数,小数点及小数部分的总位数,默认右对齐,前加负号为左对齐;精度m,若实际位数大于m,则四舍五入截去超过部分,一般实数默认输出6位。

        例如:%-10.2f,左对齐,精度即小数点后位数2位,不足位数补空格,至于在前补还是在后补看对齐方式。

        2. 格式化输入函数scanf

        一般形式:

        scanf("格式控制字符串",&arg1,&arg2,…,&argN);    // &表示取地址,地址一般用十六进制整数表示
        
                
                
        • 例如:

          scanf("%lf%lf",&length,&width);   //输入时用空格,回车符或制表符Tab隔开。
          

C++

标准库定义了一组操纵符来修改流的格式状态,包括控制数值的输入与输出形式以及控制补白的数量和位置,大多数改变格式状态的操纵符是设置/复原成对的。当操纵符改变流的格式状态时,通常改变后的状态对所有后续IO都生效。

  • 此处需注意对于double型实数,可以用%f格式用printf函数输出,但是必须用%lf格式用scanf格式输入。

    C++

    C++中对输入输出函数做的比较完善,因此不需要使用各种格式控制符,相对C来说简便许多。但是在iostream类库中提供了大量的格式化输入输出方法,流对象仍可以使用相应的成员函数或使用控制符设置格式,前提是你想要的话。

    常用I/O流控制符描述
    dec转换整数的基数为十进制
    oct转换整数的基数为八进制
    hex转换整数的基数为十六进制
    showbase在输出中显示基数指示符
    uppercase十六进制输出时一律用大写字母
    scientific科学计数法显示浮点数
    fixed定点小数形式显示浮点数
    showpoint把带有小数点的浮点数值输入到流中
    showpos正整数前带有"+"号
    unitbuf输出操作后立即刷新流
    left输出数据在本域宽范围内左对齐
    right输出数据在本域宽范围内右对齐

控制布尔值的格式

默认情况下bool值打印为1或0,我们可以使用boolalpha操纵符使之输出true或false,使用noboolapha可以取消这种格式状态。对于输入流也同样生效,只有输入true才能使值变为true,输入1不行。

int main()
{
	cout << true << endl;//1
	cout << false << endl;//0
cout <span class="token operator">&lt;&lt;</span> boolalpha<span class="token punctuation">;</span>
cout <span class="token operator">&lt;&lt;</span> true <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span><span class="token comment">//true</span>
cout <span class="token operator">&lt;&lt;</span> false <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span><span class="token comment">//false</span>

cout <span class="token operator">&lt;&lt;</span> noboolalpha<span class="token punctuation">;</span>
cout <span class="token operator">&lt;&lt;</span> true <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span><span class="token comment">//1</span>
cout <span class="token operator">&lt;&lt;</span> false <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span><span class="token comment">//0</span>

bool value <span class="token operator">=</span> false<span class="token punctuation">;</span>
cin <span class="token operator">&gt;&gt;</span> boolalpha <span class="token operator">&gt;&gt;</span> value<span class="token punctuation">;</span><span class="token comment">//输入true才打印1</span>
cout <span class="token operator">&lt;&lt;</span> value <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span> 
<span class="token function">system</span><span class="token punctuation">(</span><span class="token string">"pause"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

}

  • 指定整型值的进制

    默认情况下,整型值的输入输出使用十进制,我们可以使用操纵符hex,oct和dec将其改为十六进制,八进制,十进制。

    int main()
    {
    	cout << hex << 111 << endl;//6f
    	cout << oct << 111 << endl;//157
    	cout << dec << 111 << endl;//111
    	system("pause");
    }
    
      
      
    • 输入十六进制后输出十进制。

      int main()
      {
      	int value = 100;
      	cin >> hex>> value;
      	cout << dec << value << endl;
      	system("pause");
      }
      
          
          
      • 使用showbase可以显示进制,uppercase可以控制十六进制的x是否大写。

        int main()
        {
        	cout <<uppercase<< showbase;//在输出结果中显式进制,0x表示十六进制,0表示八进制
        	cout << hex << 111 << endl;//0X6f
        	cout << nouppercase;
        	cout << hex << 111 << endl;//0x6f
        	cout << oct << 111 << endl;//0157
        	cout << dec << 111 << endl;//111
        
        cout <span class="token operator">&lt;&lt;</span> noshowbase<span class="token punctuation">;</span>
        cout <span class="token operator">&lt;&lt;</span> hex <span class="token operator">&lt;&lt;</span> <span class="token number">111</span> <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span><span class="token comment">//6f</span>
        cout <span class="token operator">&lt;&lt;</span> oct <span class="token operator">&lt;&lt;</span> <span class="token number">111</span> <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span><span class="token comment">//157</span>
        cout <span class="token operator">&lt;&lt;</span> dec <span class="token operator">&lt;&lt;</span> <span class="token number">111</span> <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span><span class="token comment">//111</span>
        <span class="token function">system</span><span class="token punctuation">(</span><span class="token string">"pause"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        

}

  • 控制浮点数格式

    默认情况下,浮点数按六位数字精度打印,如果浮点数没有小数部分则不打印小数点,根据浮点数的值选择打印成定点十进制或科学记数法形式,标准库会选择一种可读性更好的格式:非常大和非常小的值打印为科学记数形式,其它值打印为定点十进制形式。

    默认情况下,精度控制打印的数字的总数,浮点值按当前精度舍入而非截断,使用precision可以获取当前流的浮点数精度值以及设置流的浮点数精度值。

    int main()
    {
    	cout << cout.precision() << endl;//当前精度:6
    	cout << 3.14156789 << endl;//3.14157
    	cout.precision(2);//设置当前精度为2
    	cout << 3.14156789 << endl; //3.1
    	system("pause");
    }
    
      
      
    • 只有当浮点数包含小数部分时才显式小数点,我们可以通过showpoint始终显式小数点。

      int main()
      {
      	cout << 3.0 << endl;//3
      	cout << showpoint;
      	cout << 3.0 << endl;//3.00000
      	cout << noshowpoint;
      	system("pause");
      }
      
          
          
      • 通过使用恰当的操纵符,我们可以强制一个流使用科学记数法,十六进制记数法,定点十进制记数法,默认记数法。

        int main()
        {
        	cout << 3.14156789 << endl;//默认浮点数记数法
        	cout <<scientific<< 3.14156789 << endl;//科学记数法3.141568e+00
        	cout << uppercase << 3.14156789 << endl;//大写E的科学记数法3.141568e+00
        	cout << fixed << 3.14156789 << endl;//定点十进制3.141568
        	cout << hexfloat << 3.14156789 << endl;//十六进制记数法0X1.921EE5P+1
        	cout << defaultfloat<< 3.14156789 << endl;//默认浮点数记数法
        	system("pause");
        }
        
              
              
        • 输出空白

          setw可以指定下一个输出的最小空间,如果不满则用空格填充,类似endl,setw不改变输出流的内部状态,它只决定下一个输出的大小。

          setw默认使用右对齐格式,使用left和right可以修改对齐格式为左对齐和右对齐,使用internal修改对齐格式为符号左对齐,值右对齐。使用setfill可允许指定一个字符代替默认的空格来补白输出。

          int main()
          {
          	cout <<setw(16)<< -3.14156789 << endl;
          	cout <<left<< setw(16) << -3.14156789 << endl;
          	cout << right << setw(16) << -3.14156789 << endl;
          	cout << internal << setw(16) << -3.14156789 << endl;
          	cout << setfill('*') << endl;
          	cout << left << setw(16) << -3.14156789 << endl;
          	cout << right << setw(16) << -3.14156789 << endl;
          	cout << internal << setw(16) << -3.14156789 << endl;
          	system("pause");
          }
          
                  
                  
          •         -3.14157
            -3.14157
                    -3.14157
            -        3.14157
            -3.14157********
            ********-3.14157
            -********3.14157
            
                      
                      
            • 控制输入格式

              默认情况下,输入运算符会忽略空白符(空格符,制表符,换行符,换纸符和回车符),使用noskipws会令输入运算符读取空白符,而不是跳过他们。

              int main()
              {
              	char c;
              	cin >> noskipws;
              	while (cin >> c) {
              		cout << c;
              	}
              	system("pause");
              }
              
                          
                          
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值