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

时间:2016-02-28 21:08:36

标签: c command-line max min 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传递它们但我在使用时遇到错误{ {1}}我不确定当用户输入atoi-l时是否应该添加ascii值,或者他们是否是另一种方法?

1 个答案:

答案 0 :(得分:2)

您的代码有几个问题:

  • 专业: switch个案例没有break;条款。控制属于下一个子句,最后进入default语句。
  • 专业:您的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;
}