C++中printf对齐输出方式,scanf输入为什么printf输出值不一样

scanf 输入字符时,不会跳过空格,空格也会被当做字符读取,只有在输入其他数据类型时,才会跳过空格

OJ程序设计与算法(1)第二周检测第五题对齐输出问题:输入123456789 0 -1,右边对齐输出;

使用如下代码输出结果为123456789 1 0。结果错误:

#include<iostream>
#include<cstdio> 
using namespace std;

int main()
{
    int a,b,c;
    scanf("%d,%d,%d",&a,&b,&c);    
    printf("%8d, %8d, %8d",a,b,c);    
    return 0;      
}

使用如下代码结果则能够得到正确输出

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int a,b,c;

    scanf("%d",&a);
    scanf("%d",&b);
    scanf("%d",&c);
    printf("%8d, %8d, %8d",a,b,c);

    return 0;

}

在C++中,格式控制字符串的%8d中的8就是指的实际显示在屏幕上字符占用的位数,而不是二进制位数,%8d默认有对齐输出,%-8d默认左对齐输出。 8小于实际的位数则按照实际位数输出,比如本题的123456789,8大于实际位数则显示的时候用空格代替,若要使用0代替,则应该使用%08d

在使用cin,couts输入输出时则会自动跳过空格?目前使用如下代码测试,输出的数值是正确的:

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int a,b,c;

//    scanf("%d",&a);
//    scanf("%d",&b);
//    scanf("%d",&c);
//    printf("%8d, %8d, %8d",a,b,c);
    cin>>a>>b>>c;
    cout<<a<<b<<c;
    return 0;

}
 

相关的cin,cout左右对齐输出方法稍后补充

找到的参考答案如下输出结果正确:

#include <stdio.h>
int main()
{
    int a,b,c;
    while (~scanf("%d%d%d",&a,&b,&c)){
        printf("%-8d %-8d %-8d\n",a,b,c);
    }
    return 0;
}

这里面主要涉及的就是scanf以及print本身的表达式的值,第四周课程有涉及到,稍后补充

猜你喜欢

转载自blog.csdn.net/LVT18171910/article/details/81233451