You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:46:47