如何阻止C语言代码重复打印相同的检测结果?
解决重复输出相同参数配对的问题
问题情况
运行命令./run has has时,期望得到以下输出:
The same arguments have been found has at 1, 2
但实际代码会打印两行重复内容:
The same arguments have been found has at 1, 2 The same arguments have been found has at 2, 1
问题根源
原代码的双重循环里,外层循环r遍历所有参数,内层循环k也遍历所有参数,这样每一对相同的参数会被检查两次:一次是r=1,k=2,另一次是r=2,k=1,导致重复输出。
修改方法
把内层循环的起始值改成k = r + 1,让k只从r的下一个位置开始遍历,这样每一对参数只会被检查一次,不会出现反向重复的情况。同时因为k始终大于r,r != k的判断可以直接删掉。另外原代码漏了#include <stdio.h>,补上能避免编译警告。
修改后的完整代码
#include <string.h> #include <stdio.h> int main(int argc, char *argv[]) { int r, k; printf("Command Line Arguments: "); for (r = 1; r < argc; r++) { printf("%s ", argv[r]); } printf("\n"); for (r = 1; r < argc; r++) { // 内层循环从r的下一个参数开始,避免重复检查 for (k = r + 1; k < argc; k++) { if (strcmp(argv[r], argv[k]) == 0) { printf("The same arguments have been found %s at %d, %d\n", argv[r], r, k); } } } return 0; }
效果验证
修改后运行./run has has,只会输出一行符合预期的内容,不会再出现重复的配对信息。
内容的提问来源于stack exchange,提问作者billyjoe
相关产品推荐
相关产品推荐

