2016-02-28 49 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