簡體   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