scanf 输入字符时,不会跳过空格,空格也会被当做字符读取,只有在输入其他数据类型时,才会跳过空格
OJ程序设计与算法(1)第二周检测第五题对齐输出问题:输入123456789 0 -1,右边对齐输出;
使用如下代码输出结果为123456789 1 0。结果错误:
#include
#include
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
#include
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
#include
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< return 0;
}
相关的cin,cout左右对齐输出方法稍后补充
找到的参考答案如下输出结果正确:
#include
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本身的表达式的值,第四周课程有涉及到,稍后补充