c语言程序编写中的疑问

编写程序,实现以下功能:

问题是这样的:
首先,提示用户输入5个不大于10的正整数(分5次提示,每次输入1个整数);
然后,每次用户输入数值后,判断用户输入数值是否符合要求,如果不符合则输出错误信息并终止运行;
最后,判断用户输入的5个整数是否有重复,并输出结果(“您输入的数据包含重复值” 或者 “您输入的数据不包含重复值”)。
注意:此题需要提交3个运行结果截图,分别对应合法有重复值、合法无重复值和非法的输入。

但是怎么才能每次输入数据之后都提示再次输入数据呢?这个循环我不会啊

#include <stdio.h>

int main() {
    int numbers[5];
    int i, j, num;

    // 提示用户输入五个正整数
    printf("请依次输入5个不大于10的正整数:\n");
    for (i = 0; i < 5; i++) {
        while (1) {
            printf("请输入第%d个数:", i+1);
            scanf("%d", &num);
            if (num <= 0 || num > 10) {
                printf("输入错误,请输入1~10之间的整数\n");
            }
            else {
                int flag = 0;
                for (j = 0; j < i; j++) {
                    if (numbers[j] == num) {
                        flag = 1;
                        break;
                    }
                }
                if (flag) {
                    printf("输入错误,不能重复输入相同的数\n");
                }
                else {
                    numbers[i] = num;
                    break;
                }
            }
        }
    }

    // 判断是否有重复值
    int has_duplicate = 0;
    for (i = 0; i < 4; i++) {
        for (j = i+1; j < 5; j++) {
            if (numbers[i] == numbers[j]) {
                has_duplicate = 1;
                break;
            }
        }
        if (has_duplicate) {
            break;
        }
    }

    if (has_duplicate) {
        printf("您输入的数据包含重复值\n");
    }
    else {
        printf("您输入的数据不包含重复值\n");
    }

    return 0;
}

在上述代码中,我们首先创建了一个数组 numbers 来存储用户输入的五个正整数。然后使用 for 循环和 while 循环,每次提示用户输入一个正整数,并使用条件判断结构检测用户输入是否符合要求(是整数、在 1~10 之间、没有重复),如果不符合要求则输出错误信息并要求用户重新输入。如果用户输入符合要求,则将其添加到数组 numbers 中,并执行下一次循环。

循环结束后,我们使用两个嵌套的 for 循环来判断数组中是否有重复值。如果有重复值,则输出包含重复值的提示,否则输出不包含重复值的提示。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7588530
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:编写程序接收输入的一个正整数,将其分解为质因数并保存到一个数组中,最后输出数组中的元素值
  • 除此之外, 这篇博客: C与C++程序设计学习笔记中的 5、某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的字符串来表示。例如:0010110011 就是可能的情况。你的任务是算出所有可能情况。每个答案占一行。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include <stdio.h>
    int ti[11] = { 0 }; //用来存储每道题的回答情况0或者1,0表示错误,1表示正确
    //提醒:数组ti的编号实际用1-10
    //score表示当前得分,num是当前第num道题目
    void f(int score, int num)
    {
    	if (num == 11)//10道题目全部做完
    	{
    		if (score == 100)
    		{
    			int i = 0;
    			for (i = 1; i <= 10; i++)
    				printf("%d", ti[i]);
    			printf("\n");
    		}
    	}
    	else //10道题目没有做完
    	{
    		ti[num] = 1; //讨论第num道题目的正确情况
    		f(score * 2, num + 1);
    		ti[num] = 0; //讨论第num道题目的错误情况
    		f(score - num, num + 1);
    	}
    }
    int main(void)
    {
    	f(10, 1);//从基础分10分开始,从第1题开始
    	return 0;
    }
    

  • 您还可以看一下 韦语洋(Lccee)老师的一机一码加密、被破解自动销毁随时授权回收升级系列视频课程课程中的 演示误报效果,一些被误报的特征的解除方式(重要)小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^