使用双数组函数打印奇数时末尾多余逗号问题求助
问题核心
你的代码输出末尾多逗号的原因是判断逗号输出的逻辑完全错误:你用(s1+s2)/2作为奇数数量的参考,但实际奇数的数量和两个数组总长度的半值没有任何关联——比如第二个测试用例总长度为6,半值是3,但实际只有2个奇数,导致最后一个奇数后依然输出了逗号。
修复方案
这里提供两种简洁可靠的修复方式:
方案一:先统计总奇数数,按需输出逗号
先遍历两个数组统计出所有奇数的总数,再遍历输出奇数,仅当当前输出的不是最后一个奇数时才添加逗号:
#include<stdio.h> void printOdd(int arr1[], int arr2[], int s1, int s2) { // 统计所有奇数的总数 int totalOdds = 0; for (int i = 0; i < s1; i++) { if (arr1[i] % 2 != 0) totalOdds++; } for (int i = 0; i < s2; i++) { if (arr2[i] % 2 != 0) totalOdds++; } // 遍历输出奇数,判断是否添加逗号 int currentCount = 0; for (int i = 0; i < s1; i++) { if (arr1[i] % 2 != 0) { printf("%d", arr1[i]); currentCount++; if (currentCount < totalOdds) printf(", "); } } for (int i = 0; i < s2; i++) { if (arr2[i] % 2 != 0) { printf("%d", arr2[i]); currentCount++; if (currentCount < totalOdds) printf(", "); } } } int main(void) { int s1, s2; printf("Enter first array size: "); scanf("%d", &s1); int arr1[s1]; printf("Enter second array size: "); scanf("%d", &s2); int arr2[s2]; printf("Enter first array values: "); for(int x = 0; x < s1; x++) { scanf("%d", &arr1[x]); } printf("Enter second array values: "); for(int y = 0; y < s2; y++) { scanf("%d", &arr2[y]); } printOdd(arr1, arr2, s1, s2); }
方案二:先输出第一个奇数,后续奇数前加逗号
这种方法无需提前统计总数,逻辑更简洁:先找到第一个奇数直接输出,之后每遇到一个奇数,先输出逗号再输出数字,从根源避免末尾逗号:
#include<stdio.h> void printOdd(int arr1[], int arr2[], int s1, int s2) { int hasPrinted = 0; // 标记是否已输出第一个奇数 // 处理第一个数组 for (int i = 0; i < s1; i++) { if (arr1[i] % 2 != 0) { if (hasPrinted) printf(", "); printf("%d", arr1[i]); hasPrinted = 1; } } // 处理第二个数组 for (int i = 0; i < s2; i++) { if (arr2[i] % 2 != 0) { if (hasPrinted) printf(", "); printf("%d", arr2[i]); hasPrinted = 1; } } } int main(void) { int s1, s2; printf("Enter first array size: "); scanf("%d", &s1); int arr1[s1]; printf("Enter second array size: "); scanf("%d", &s2); int arr2[s2]; printf("Enter first array values: "); for(int x = 0; x < s1; x++) { scanf("%d", &arr1[x]); } printf("Enter second array values: "); for(int y = 0; y < s2; y++) { scanf("%d", &arr2[y]); } printOdd(arr1, arr2, s1, s2); }
测试验证
用你提供的第二个测试用例验证:
输入:
Enter first array size: 3 Enter second array size: 3 Enter first array values: 5 6 10 Enter second array values: 12 41 36
输出为:5, 41,完全符合预期。
内容的提问来源于stack exchange,提问作者Gie
相关产品推荐
相关产品推荐

