注册 登录
编程论坛 C语言论坛

输入10到15个数字按最大最小第二大第二小第三大第三小……输出

wuxiami 发布于 2022-08-22 21:41, 1500 次点击
#include <stdio.h>



int main()
{
    int n = 0, shuzu[20];
    int num[20];

    printf("请输入数字:");
    while (scanf_s("%s", &num, 100))
    {
        if (!strcmp(num, "ok") || !strcmp(num, "OK"))   //strcmp函数   比较函数,  #include <string.h> // strcmp()函数头文件
        {
            break;
        }
        shuzu[n] = atoi(num);    //atoi函数           #include<stdlib.h> // atoi()函数头文件
        n = n + 1;                //输入一个数字  n+1
    }
    int temp, i;
    for (i = 0; i < n-1  ; i++)         //因为数组两两比较,第一层循环中最后一个为数组倒数第二个
    {
        for (int j = i + 1; j < n; j++)////因为数组两两比较,第二层循环中每一个都是第一层循环数字后一个开始
        {
            if (shuzu[i] < shuzu[j])
            {
                temp = shuzu[i];
                shuzu[i] = shuzu[j];
                shuzu[j] = temp;
            }
        }
    }
    printf("排序后:");
    for (i = 0; i < n / 2; i++)
    {
        printf("%d ", shuzu[i]);
        printf("%d ", shuzu[n - i - 1]);
    }
    if (n % 2 == 1)
    {
        printf("%d ", shuzu[i]);
    }
    return 0;
}

大佬们输出不正确,不知道哪里问题
6 回复
#2
rjsp2022-08-22 22:16
大佬们输出不正确,不知道哪里问题
什么不正确?编译不正确,还是运行结果不符合你的预期?
编译不正确的话,贴出编译错误;
    比如 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“int (*)[20]”
    比如 “strcmp”: 找不到标识符
    比如 “atoi”: 找不到标识符
运行结果不正确的话,贴出你的输入数据,你期待的输出数据。
#3
wuxiami2022-08-22 22:58
回复 2楼 rjsp
请输入数字:0 1 2 3 4 5 6 7 8 9
ok
排序后:9 -16843010 8 -16843010 7 -16843010 6 3 5 4

这个是输入输出
最后还引发异常Run-Time Check Failure #2 - Stack around the variable 'num' was corrupted.
#4
rjsp2022-08-23 07:56
以下是引用wuxiami在2022-8-22 22:58:02的发言:

请输入数字:0 1 2 3 4 5 6 7 8 9
ok
排序后:9 -16843010 8 -16843010 7 -16843010 6 3 5 4

这个是输入输出
最后还引发异常Run-Time Check Failure #2 - Stack around the variable 'num' was corrupted.

首先你的代码就不能编译通过,int num[20]; 应该是 char num[20]
其次你用了这个 scanf_s 超恶心的函数,那就得依照它的要求来,
int num[20];  while (scanf_s("%s", &num, 100)
改为
char num[20]; while (scanf_s("%s", num, 20))
#5
rjsp2022-08-23 07:58
另外,while (scanf_s("%s", &num, 100)) 也是瞎写,scanf_s("%s" 什么时候会返回0?
#6
apull2022-08-23 09:21
while (scanf_s("%s", &num, 100))改为 while (scanf_s("%d", &num))
scanf_s返回正确输入的个数,因此当输入非数字时,返回值是0,循环里的那个if也可以删了。
#7
wuxiami2022-08-25 11:44
多谢大佬
1