列中打印数字时如何避免打印垃圾?
How to avoid printing junk when printing numbers in columns?
此代码从文件中获取所有数字,并根据条件将它们分成三列。每个数字可以出现在一列或多列中。
while(!feof(fp)) {
i++;
fscanf(fp,"%d", &b);
if(b%2==0) {
arr[j]=b;
j++;
}
if(b%2==1) {
arr2[jj]=b;
jj++;
}else if(i>b){
printf(" ");
}
if(b%5==0) {
arr3[jjj]=b;
jjj++;
}else if(i>b){
printf(" ");
}
}
while(a < j || a < jj || a < jjj){
printf(" %3d %3d %3d n", arr[a],arr2[a],arr3[a]);
a++;
它像这样输出它们:
Even: Odd: Divisible by 5:
10 3 10
20 7 20
22 13 30
24 21 -234455
26 29 0
30 344208 2056
它输出末尾以外的垃圾(地址(数字。我试过了,但我无法清理它们。
想法?
您将遇到的一件事是,可被 5 整除的数字可能比偶数或奇数少。
我建议在打印前确保 a 小于相应的最大数组数。 如果没有,也许可以打印一个制表符或空格。
清理输出的一种方法是有条件地进行打印。这样,您就不能使用一个printf
语句打印所有三个数字,而必须单独打印:
while(a < j || a < jj || a < jjj)
{
if (a < j)
printf(" %3d ", arr[a]);
else
printf(" %3s ", "");
if (a < jj)
printf(" %3d ", arr2[a]);
else
printf(" %3s ", "");
if (a < jjj)
printf(" %3d ", arr3[a]);
else
printf(" %3s ", "");
putchar('n');
a++;
}
在这里,我使用%3s
和空字符串来确保空字段与数字很好地对齐。你可以打印一堆空格,但你必须仔细编辑你的代码,以确保有正确数量的空格。
可以将条件打印的逻辑填充到printf
的格式说明符中,并使用一个语句完成所有打印,但这会使代码更难理解和修改。像这样:
bool is_valid1 = (a < j);
int int_field1 = is_valid1 ? 3 : 0;
int int_value1 = is_valid1 ? arr[j] : 0;
int str_field1 = 3 - int_field1;
bool is_valid2 = (a < jj);
int int_field2 = is_valid2 ? 3 : 0;
int int_value2 = is_valid2 ? arr2[jj] : 0;
int str_field2 = 3 - int_field2;
bool is_valid3 = (a < jjj);
int int_field3 = is_valid3 ? 3 : 0;
int int_value3 = is_valid3 ? arr3[jjj] : 0;
int str_field3 = 3 - int_field3;
printf(" %*.d%*s %*.d%*s %*.d%*sn",
int_field1, int_value1, str_field1, "",
int_field2, int_value2, str_field2, "",
int_field3, int_value3, str_field3, "");
在这里,%*.d
格式说明符告诉printf,我的整数字段的宽度是要printf
的参数。我计算它是 3(如果整数有效(或 0(如果它无效(。点.
告诉它,如果字段的宽度为 0,则不打印任何内容。
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- C++避免重复声明的语法是什么
- 在没有太多条件句的情况下,我如何避免被零除
- 如何在c++中打印目录
- 如何重构类层次结构以避免菱形问题
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 我如何处理 TMP 以避免打印任何东西
- 列中打印数字时如何避免打印垃圾?
- 我可以避免通过time_t打印时间点吗
- 如何避免在同一行上进行这种打印?
- 如何避免在打印类似于"%q"的字符时在 vsprintf_s() 处崩溃
- 在c++中,当我使用具有cout的函数时,如何避免打印消息
- 如何避免打印cout语句的终端空间
- OpenGL:如何剪辑一个2D区域,以避免文本与GlutBitmap被打印出该区域
- 打印双精度到字符串流时如何避免"exponent"格式
- 避免在vim中打印DoxygenToolkit中的参数