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

怎么取消重复显示的标题

qq336 发布于 2021-10-17 15:48, 1542 次点击
程序目的:求任意两个整数之间所有整数之和(输入的2个整数不能相等)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//求任意两个整数之间所有整数之和(输入的2个整数不能相等)
int biaoti(){
printf("求任意两个整数之间所有整数和(输入的2个整数不能相等):\n");     //给出计算目的
puts("请输入两个整数。");                                                //等同于printf("请输入两个整数。\n");
return 0;
}
int main(void)                     
{
    int a, b, n1, n2;
    int sum = 0;                                                          //初始化sum
    biaoti();                                                             //输出标题
    printf("整数a:"); scanf_s("%d", &a);
    printf("整数b:"); scanf_s("%d", &b);
    if (a == b) {                                                         //当a=b时,不执行程序   
   
    }else {
    do {
        
        if (a < b)
            n1 = a, n2 = b;
        else if (a > b)
            n1 = b, n2 = a;
    } while (a == b);

    do {
        sum = sum + n1;
        n1 = n1 + 1;
    } while (n1 <= n2);
    }
    if (a == b) {
        printf("错误:两数相等,请重新输入!\n");                        //puts只能输出设定好的语句,不能输出返回的计算值
        main();
    }else {
    if (a < b)
        printf("大于等于%d小于等于%d的所有整数的和是%d。 \n", a, b, sum);
    else
        printf("大于等于%d小于等于%d的所有整数的和是%d。 \n", b, a, sum);
    }
    return 0;
}
但是运行时当输入了2个相等的数之后,会再输出一遍标题,这里想取消再输标题,直接转到这里
    printf("整数a:"); scanf_s("%d", &a);
    printf("整数b:"); scanf_s("%d", &b);
10 回复
#2
自由而无用2021-10-17 17:49
wow~ your code is very dizzy, buddy emmmm.... are you from another universe
#3
自由而无用2021-10-17 17:50
https://blog.
#4
qq3362021-10-17 22:19
回复 3楼 自由而无用
这个代码确实简单些,不过我的功能要多些:
1.判断输入的2个数是否相等,如果相等,返回重新输入;
2.输出的语句中小数在前,大数在后;
#5
qq3362021-10-17 22:20
回复 3楼 自由而无用
综合一下:
#include<stdio.h>
#include<stdlib.h>


//求任意两个整数之间所有整数之和(输入的2个整数不能相等)
int biaoti() {
    printf("求任意两个整数之间所有整数和(输入的2个整数不能相等):\n");     //给出计算目的
    puts("请输入两个整数。");                                                //等同于printf("请输入两个整数。\n");
    return 0;
}
int main(void)
{
    int a, b, start, end;
    int sum = 0;                                                          //初始化sum
    biaoti();                                                             //输出标题
    printf("整数a:"); scanf_s("%d", &a);
    printf("整数b:"); scanf_s("%d", &b);
    if (a < b) {
        start = a; end = b;
    }
    else {
        start = b, end = a;
    }
    while (start <= end) {
        sum = sum + start;
        start = start + 1;
    }
    if (a == b) {                                                  //如果输入的2个整数相同,则显示错误,返回重新输入
        printf("错误:输入的2个整数相等,请重新输入!\n");
            main();
    }
    else {                                                         //否则,判断大小,小的在前,大的再后,再显示计算值
        if (a < b) {
            printf("%d和%d之间所有整数和为:%d\n", a, b, sum);
            system("pause");                                       //计算结果显示后,有任意输入再退出
        }else{
        printf("%d和%d之间所有整数和为:%d\n", b, a, sum);
        system("pause");                                           //计算结果显示后,有任意输入再退出
        }
    }
    return 0;
}  
#6
qq3362021-10-17 22:21
回复 3楼 自由而无用
我问的怎么取消 输入相同数后  重复输出标题的问题?
#7
自由而无用2021-10-18 07:46
//online parser: https://www.bccn.net/run/
程序代码:
#include <stdio.h>

int main(int argc, char *argv[])
{
    int i = -1, n1, n2;
#define DEFINE_START_LOGO 0x3c
    n1 = n2 = DEFINE_START_LOGO;

    //request data
    while ((i++, n1 == n2)) {
        n1 = ((unsigned char *)main)[i];
        n2 = ((unsigned char *)main)[i + 1];
        printf("n1 = %d, n2 = %d\n", n1, n2);
        if (n1 > n2) {
            argc = n1; n1 = n2; n2 = argc;
        }
    }
    //calc
    for (i = n1, argc = 0; i <= n2; i++) argc += i;
    //output
    printf("start from %d to %d\n", n1, n2);
    printf("sum = %d\n", argc);
   
    return 0;
}


output sample:
n1 = 85, n2 = 72
start from 72 to 85
sum = 1099

[此贴子已经被作者于2021-10-18 07:51编辑过]

#8
qq3362021-10-18 09:47
回复 7楼 自由而无用
我刚学,你写的这个还看不懂。请问怎么能在输入相同的数后不再输出标题呢?
#9
自由而无用2021-10-18 09:56
int main(void)
{
    static int repeat = 0;
    int a, b, start, end;
    int sum = 0;                                                          //初始化sum
    if (!repeat)
    biaoti();
    ..............
    if (a == b) {
        printf("错误:两数相等,请重新输入!\n");                        //puts只能输出设定好的语句,不能输出返回的计算值
        repeat = 1;
        main();
    ..............
#10
apull2021-10-18 11:33
修改了下你的,输入循环检查,直到a!=b跳出循环。
程序代码:

#include<stdio.h>
#include<stdlib.h>

//求任意两个整数之间所有整数之和(输入的2个整数不能相等)
int main(void)
{
    int a, b, start, end;
    int sum = 0;                                                          //初始化sum
    printf("求任意两个整数之间所有整数和(输入的2个整数不能相等):\n");     //给出计算目的
    puts("请输入两个整数。");  
    //输出标题
    while(1)
    {
        printf("整数a:"); scanf("%d", &a);
        printf("整数b:"); scanf("%d", &b);
        if (a != b)                                                  //如果输入的2个整数相同,则显示错误,返回重新输入
            break;
        printf("错误:输入的2个整数相等,请重新输入!\n");
    }
   
    start=a;   
    if(a>b) //交换a,b,
    {
        start=b;
        b=a;
        a=start;
    }
   
    while (start <= b) {
        sum = sum + start;
        start = start + 1;
    }
   
    printf("%d和%d之间所有整数和为:%d\n", a, b, sum);    //前面已经调换,必定是a<b
   
   
//system("pause");  
    return 0;
}  


[此贴子已经被作者于2021-10-18 20:51编辑过]

#11
qq3362021-10-18 15:10
回复 10楼 apull
start = a;
    if (a > b) {      //交换a,b,                                                            
        a = b;         //start=a;  前面已经赋值,这里忽略
        b = start;
    }
这里如果输入的a > b, if语句运行之后感觉应该只是a和b调换了,start没有换啊,还是大的那个值




[此贴子已经被作者于2021-10-18 15:37编辑过]

#12
qq3362021-10-18 15:32
回复 10楼 apull
start = a;
    if (a > b) //交换a,b,
    {
        //start=a;  前面已经赋值,这里忽略
        a = b;
        b = start;
    }
这个调换是有问题的,如果输入的a>b,这个只是把a和b调换了,start还是大的那个值。
输入的是3和1,出来的值是却是3。
在这个代码下面再对start重新赋值就没这个问题了
    start = a;
    if (a > b) //交换a,b,
    {
        //start=a;  前面已经赋值,这里忽略
        a = b;
        b = start;
    }
    start = a;

你看看我分析的对不对?

[此贴子已经被作者于2021-10-18 15:34编辑过]

#13
qq3362021-10-18 15:50
回复 10楼 apull
下面是我用另一种方法实现的,请帮看看,这2种(和你的那种)思路那种运行效率更高,内存占用更低,哪种更好(我是新手,不懂)
#include<stdio.h>
#include<stdlib.h>
//求任意两个整数之间所有整数之和(输入的2个整数不能相等)
int leijia(int start, int end) {                               //累加器,输入start不能比end大
    int sum = 0;
    while (start <= end) {
        sum = sum + start;
        start++;
    }
    return sum;
}
int dayin(int k, int l) {
    printf("请输入第一个整数:"); scanf_s("%d", &k);
    printf("请输入第二个整数:"); scanf_s("%d", &l);
    if (k == l) {
        printf("错误:两数相等,请重新输入!\n");
        dayin(k, l);
    }
    else {
        if (k < l) {                                                                     
            printf("大于等于%d小于等于%d的所有整数的和是%d。\n", k, l, leijia(k, l));         //小数在前
        }
        else {
            printf("大于等于%d小于等于%d的所有整数的和是%d。\n", l, k, leijia(l, k));         //小数在前
        }
    }
    return 0;
}
int main(int k, int l) {
    printf("求任意两个整数之间所有整数和(输入的2个整数不能相等):\n");
    printf("请输入两个整数。\n");
    dayin(k, l);
    system("pause");
    return 0;
}

[此贴子已经被作者于2021-10-18 15:53编辑过]

#14
apull2021-10-18 20:55
不建议用
if (k == l) {
        printf("错误:两数相等,请重新输入!\n");
        dayin(k, l);
    }
这种方式,这成了递归,递归的开销不小的。
#15
qq3362021-10-18 21:17
回复 14楼 apull
就刚学递归,谢谢提醒,尽量不用
1