繁体   English   中英

使用atoi查找最大和最小的数字

[英]Finding largest and smallest numbers using atoi

    scanf("%1c%2c %d %d %d %d %d %d %d %d %d %d",
          &x, &y, &arr[0], &arr[1], &arr[2], &arr[3], &arr[4],
          &arr[5], &arr[6], &arr[7], &arr[8], &arr[9]);
    strcpy(string, x);
    value1 = atoi(string);

    strcpy(string, y);
    value2 = atoi(string);

    value_final = value1 + value2;

我正在尝试获取-l-s的ascii值,然后将它们通过添加了ascii值的switch传递,但是我在使用atoi时遇到错误,并且不确定是否应该使用当用户输入-l-s或如果它们是另一种方式时,添加ascii值?

您的代码有几个问题:

  • 重要: switch盒没有break; 条款。 控制权属于下一个子句,最后属于default语句。
  • Major:您在char数组和单个char变量之间的显示混乱: strcpy(string, x); 甚至不应该编译。
  • 您解析-l-s方法非常复杂,并且可能是错误的。 您应该使用字符文字。
  • 您不需要双循环即可找到数组中的最小或最大元素。 一个循环就足够了,并且printf语句应该在循环之外。 maxmin未初始化,循环调用未定义的行为。
  • 标题说使用atoi() :如果这是您的工作,则不应使用scanf()

这是一个简化的版本:

int main(void) {
    char option[3], buffer[32];
    int i, min, max, value;

    min = max = 0;
    if (scanf("%2s", option) == 1) {
        for (int i = 0; i < 10 && scanf("%31s", buffer) == 1; i++) {
            value = atoi(buffer);
            if (i == 0) {
                min = max = value;
            } else {
                if (min > value)
                    min = value;
                if (max < value)
                    max = value;
            }
        }
        if (!strcmp(option, "-l")) {
            printf("output: The largest number is %d\n", max);
            return 0;
        } else
        if (!strcmp(option, "-s")) {
            printf("output: The smallest number is %d\n", min);
            return 0;
        }
    }
    printf("You have entered an invalid option, try again next time.\n");
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM