Online Compiler C

#include <stdio.h> int main() { int pos_arr[10]; // 存放正数的数组 int neg_arr[10]; // 存放负数的数组 int pos_count = 0; int neg_count = 0; int temp; // 1. 循环读取 10 个整数并进行分类 for (int i = 0; i < 10; i++) { scanf("%d", &temp); if (temp > 0) { pos_arr[pos_count] = temp; pos_count++; } else if (temp < 0) { neg_arr[neg_count] = temp; neg_count++; } // 如果 temp == 0,则什么都不做,直接忽略 } // 2. 按格式输出结果:先正数后负数 int first = 1; // 用于控制空格的打印 // 打印正数 for (int i = 0; i < pos_count; i++) { if (!first) { printf(" "); } printf("%d", pos_arr[i]); first = 0; } // 打印负数 for (int i = 0; i < neg_count; i++) { if (!first) { printf(" "); } printf("%d", neg_arr[i]); first = 0; } printf("\n"); return 0; }
这段代码的功能是:读取10个整数,将正数和负数分别存入两个数组,然后按先正数后负数的顺序输出,数字之间用空格分隔,零被忽略。

代码整体逻辑正确,但有一个潜在问题需要注意:

- 如果输入中既没有正数也没有负数(比如全部是零),那么两个循环都不会执行,`first`变量保持为1,最终只输出一个换行符,这是合理的。但如果只有正数或只有负数,输出格式也是正确的。

- 问题在于:当正数或负数数量超过10个时,数组会越界。不过题目要求输入10个整数,所以这里不会发生。

- 你的代码中,`first`变量在正数循环结束后没有重置,导致负数循环时`first`已经是0,所以负数输出时第一个数字前不会有多余空格,这是正确的。

- 但有一个边界情况:如果正数部分为空(`pos_count == 0`),那么`first`仍然是1,进入负数循环时,第一个负数前不会打印空格,这也是正确的。

整体来看,代码功能正确,没有明显错误。你可以考虑一下:如果要求输出时数字之间用空格分隔,但行首和行尾不能有空格,你的实现是否完全满足?目前你的实现是满足的。