学c的萌新 发表于 2023-8-13 14:30:02

if语句的测试题,我有一些问题想要问大家

本帖最后由 学c的萌新 于 2023-8-19 22:57 编辑

函数部分是这个,使用的编辑器是visual studio
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

void test01()
{
        int a = 0;
        int b = 0;
        int c = 0;
        printf("请输入三只小猪的体重分别为:\n");
        scanf_s("%d,%d,%d", &a,&b,&c);
        printf("您输入的小猪体重分别为:%d,%d,%d\n", a, b, c);
        if (a > b)
        {
                if (a > c)
                        printf("a猪的体重最大\n");
                else
                        printf("c猪的体重最大\n");

        }
        else
        {
                if (b > c)
                        printf("b猪体重最大\n");
                else
                        printf("c猪的体重最大\n");

        }
}
int main()
{
        test01();
        system("pause");
        return EXIT_SUCCESS;

}
请大佬们优化这个代码,然后就是我输入这三个值之后,如果不带英文的逗号那么就无法返回我输入的值,我不知道是什么原因,可能和地址符的内涵有关系,应该涉及一些底层

最近看见了大佬们的回复我感觉很温暖,包括使用逻辑与,使用空格断开,使用三目运算符还有延时函数sleep等,我感觉受益匪浅,但是我有个问题,就是,在实际的使用当中,使用者可能不以空格为分隔符,那么如何避免这种情况,能不能让分隔符自己跳出来,或者是加上一些提示,谢谢各位

isdkz 发表于 2023-8-13 14:30:26

这段代码存在一些问题,我将为您进行优化。

首先,关于输入值时不带英文逗号的问题,是因为您在 scanf_s 函数中使用了 %d,%d,%d 作为格式字符串,这意味着您需要在输入时使用英文逗号分隔每个数字。如果您想要输入数字时不带逗号,可以将格式字符串修改为 %d %d %d ,使用空格作为分隔符。

其次,您可以使用更简洁的方式来进行比较和输出结果。可以使用三元运算符来简化 if-else 嵌套的逻辑。

下面是经过优化后的代码:

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

void test01()
{
    int a, b, c;
    printf("请输入三只小猪的体重分别为:\n");
    scanf_s("%d %d %d", &a, &b, &c);
    printf("您输入的小猪体重分别为:%d %d %d\n", a, b, c);

    if (a > b && a > c)
    {
      printf("a猪的体重最大\n");
    }
    else if (b > c)
    {
      printf("b猪的体重最大\n");
    }
    else
    {
      printf("c猪的体重最大\n");
    }
}

int main()
{
    test01();
    system("pause");
    return EXIT_SUCCESS;
}


通过使用空格作为分隔符,您可以在输入时不带逗号,这样就可以返回正确的输入值。优化后的代码使用了更简洁的逻辑来比较三只小猪的体重,并输出最大体重对应的小猪。

希望对您有所帮助!如果您还有其他问题,请随时提问。

陶远航 发表于 2023-8-13 14:30:55

你的代码已经很简洁和有效了,但是我注意到你提到的一个问题。在使用 scanf_s 函数接收输入时,如果不带英文逗号,可能导致输入失败或者无法返回正确的值。这是因为 scanf_s 函数在读取格式化字符串时,会按照指定的字符进行分隔。所以,当你输入数字时,必须确保输入的数字之间使用英文逗号 , 进行分隔。

如果你想要更加友好地处理输入,可以考虑通过其他方式获取用户输入,例如使用空格或者换行符进行分隔。这样用户输入时不再受限于英文逗号,可以更加自由地输入数字。

另外,你的代码中使用了 system("pause") 来暂停程序的执行,这是一种常见的做法,但不够优雅。具体原因是 system 函数的调用会创建一个新的系统进程,而且在不同平台上的行为可能不一致。更好的替代方案是使用跨平台的延迟函数,比如 Sleep:

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

void test01() {
    int a = 0;
    int b = 0;
    int c = 0;
    printf("请输入三只小猪的体重分别为:\n");
    scanf("%d %d %d", &a, &b, &c);
    printf("您输入的小猪体重分别为:%d, %d, %d\n", a, b, c);
   
    if (a > b) {
      if (a > c)
            printf("a猪的体重最大\n");
      else
            printf("c猪的体重最大\n");
    }
    else {
      if (b > c)
            printf("b猪体重最大\n");
      else
            printf("c猪的体重最大\n");
    }
}

int main() {
    test01();
    sleep(3000);// 延迟3秒
    return EXIT_SUCCESS;
}


注意,上述代码中用到了 sleep 函数来进行延迟,其参数是毫秒数,表示程序挂起的时间。这样可以在不创建新进程的情况下实现暂停效果。

希望对你有所帮助,如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

wansurong 发表于 2023-8-13 17:46:00

以下是稍微优化过的代码,并且使用空格作为分隔符:

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

void test01()
{
    int weights;
   
    printf("请输入三只小猪的体重分别为:\n");
    scanf("%d %d %d", &weights, &weights, &weights);
   
    printf("您输入的小猪体重分别为:%d %d %d\n", weights, weights, weights);
   
    int maxIndex = 0;
   
    for (int i = 1; i < 3; ++i)
    {
      if (weights > weights)
      {
            maxIndex = i;
      }
    }
   
    if (maxIndex == 0)
    {
      printf("a猪的体重最大\n");
    }
    else if (maxIndex == 1)
    {
      printf("b猪的体重最大\n");
    }
    else
    {
      printf("c猪的体重最大\n");
    }
}

int main()
{
    test01();
    system("pause");
    return EXIT_SUCCESS;
}
在这个代码中,我使用了一个数组来存储三只小猪的体重,用循环来找到最大的体重,并根据最大体重的索引来输出相应的结论。同时,我使用了空格作为 scanf 函数的分隔符,这样输入时就不再需要英文逗号。
页: [1]
查看完整版本: if语句的测试题,我有一些问题想要问大家