2016-02-28 48 views
0
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; 

我試圖讓ASCII值求最大和最小的號碼-l-s然後通過他們通過switch與添加的ASCII值,但是當我使用atoi,我遇到錯誤我不確定您是否應該在用戶輸入-l-s時添加ascii值,或者他們是否是另一種方式來執行此操作?使用的atoi

+0

Unintialised變量'min'和'max'。未定義的行爲。 –

+0

'strcpy(string,x);'....編譯器對此有何評論? –

+0

'if(x ==' - '&& y =='l'){...'也是'scanf'應該是'scanf(「%c%c%d%d ...)' –

回答

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; 
} 
+0

@YellowBird:你的問題標題是*使用atoi *查找最大和最小的數字,但所有的數字轉換都是通過'scanf'完成的,你使用'atoi'的方式沒有意義,你應該使用'atoi'? – chqrlie

+0

@YellowBird:好的,我更新了上面的代碼以使用'atoi'將'scanf'讀取的字符串轉換爲數字 – chqrlie

+0

並且爲什麼使用3作爲您的選項陣列的大小? – YellowBird