角色转换

时间:2018-03-03 14:52:07

标签: c

我在这里缺少什么?我想将用户输入的字母转换为if语句中的相应整数。

#include <stdio.h>

    int main()
    {
      int i=0, j=0;
      int array[1000];


      printf("Input letters to convert into integers: ");
      do {
          scanf("%d", array[i]);
          i++;
      } while(array[i+1] != '\n');


     for(j = 0; j < i; j++){
        if (array[j] == 'A')
          printf("2 1 ");
        else if (array[j] == 'B')
          printf("2 2 ");
        //and so on...

1 个答案:

答案 0 :(得分:4)

这里不需要int数组,只需要一个简单的char数组。您可以使用%s格式说明符一次性获取所有这些字符。

char array[1000];
if( 1 != scanf("%999s",array) ){
   fprintf(stderr,"Error in input\n");
   exit(EXIT_FAILURE);
}
size_t len = strlen(array);
for( size_t i = 0; i < len; i++ ){
   if( array[i] == 'A' ){
      ...
   } 
   else if( .. ){

   }
}

如果您需要获得空白区域,scanf %s格式说明符无法获得帮助。然后使用fgets

char array[1000];
if( !fgets(array, 1000, stdin) ){
   fprintf(stderr,"Error in input\n");
   exit(EXIT_FAILURE);
}
array[strcspn(array, "\n")] = 0;
size_t len = strlen(array);
for( size_t i = 0; i < len; i++ ){
   if( array[i] == 'A' ){
      ...
   } 
   else if( .. ){

   }
}

更好的方法是使用switch case语句。这样可以避免编写26 if -else语句。

另外一点 - 而不是伪装成if-else的硬编码数据,只需将其存储在数组中然后相应地使用它。

要解释之前的问题 - 您使用了scanf错误的方式 - 它将是scanf("%d",&array[i]);scanf("%d",array+i)。它是变量的地址,而不是scanf所期望的变量值。

不仅您的代码存在访问数组索引的潜在问题 - 这是未定义的行为。 (在i=999访问1000索引时考虑。而且你正在与未初始化的价值进行比较 - 这也是一种错误的方式。