带有空格字符输出的整数数组

时间:2018-02-01 11:01:06

标签: c

我正在尝试编写一个c程序。它必须输入两个数组,输入应该是空格分隔。我试图以某种方式消除' \ n'。

#include <stdio.h>

int main()
{
    char temp;
    int alc[3]={0}, bob[3]={0}, i=0;

    //enter alice 
    do 
    {
        scanf("%d%c", &alc[i], &temp);
        i++;
        } while(temp != '\n');

    i=0;

    //enter bob
       do 
    {
        scanf("%d%c", &bob[i], &temp);
        i++;
    } while(temp != '\n');

    //print alice
    for(i = 0; i < 3 ; i++)
    {
            printf("%d ", alc[i]);
    }

    //print bob
    for(i = 0; i < 3 ; i++)
    {
            printf("%d ", bob[i]);
    }


    return 0;    
}

输出./a.out

5 6 7
3 6 10
5 6 7 3 6 10

有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

这个想法是将行作为输入,然后解析它以使用strtol等获取整数。使用fgets获得的行。然后你将它存储在数组中。现在有两种选择,

  • 如果您获得的元素数量超过数组中的数量,那么当数组已满时您将显示错误。

  • 或者使用动态分配的内存,随着输入的数量的增加而增加。

我担心,使用scanf直到获得整数是一种选择 - 但这不是一个好主意,scanf不是解决这个问题的简单方法。

答案 1 :(得分:1)

以下提议的代码:

  1. 干净地编译
  2. 遵循公理:每行只有一个语句,并且(最多)每个语句一个变量声明。
  3. 始终缩进
  4. 消除不需要的变量
  5. 限制变量的范围
  6. 执行所需的功能
  7. 从系统功能中正确检查错误指示
  8. 记录每个头文件包含的原因
  9. 给出有意义名称的所有“魔法”数字(通过#define声明)
  10. 现在建议的代码:

    #include <stdio.h>     // scanf(), fprintf(), stderr, printf()
    #include <stdlib.h>    // exit(), EXIT_FAILURE
    
    
    #define MAX_NUMS_PER_PERSON 3
    
    
    int main( void )
    {
        int alice[ MAX_NUMS_PER_PERSON ]={0};
        int bob[ MAX_NUMS_PER_PERSON ]={0};
    
        //enter alice
        for( int i=0; i< MAX_NUMS_PER_PERSON; i++ )
        {
            if( 1 != scanf("%d", &alice[i]) )
            {
                fprintf( stderr, "failed to input nums for Alice\n" );
                exit( EXIT_FAILURE );
            }
    
            // implied else, scanf successful
        }
    
        //enter bob
        for( int i=0; i< MAX_NUMS_PER_PERSON; i++ )
        {
            if( 1 != scanf("%d", &bob[i]) )
            {
                fprintf( stderr, "failed to input nums for Bob\n" );
                exit( EXIT_FAILURE );
            }
    
            // implied else, scanf successful
        }
    
    
        //print alice
        for( int i = 0; i < MAX_NUMS_PER_PERSON; i++)
        {
            printf("%d ", alice[i]);
        }
    
        //print bob
        for( int i = 0; i < MAX_NUMS_PER_PERSON; i++)
        {
            printf("%d ", bob[i]);
        }
    
        return 0;
    }
    

答案 2 :(得分:0)

根据此答案更改了我的C程序

Putting numbers separated by a space into an array

#include <stdio.h>
#include <ctype.h>

#define ARRAY_SIZE 3

#define BOB_SIZE    5
#define ALICE_SIZE  4

int main()
{
    int tmp, i=0;
    char follow;
    int count;
    int a[ALICE_SIZE]={0}, b[BOB_SIZE]={0};

    if((ALICE_SIZE < ARRAY_SIZE) || (BOB_SIZE < ARRAY_SIZE))
    {   
        printf("Not sufficient space in array, check the sizes.\n");
        return -1;
    } 

    while ((i < ARRAY_SIZE) && (count = scanf("%d%c", &tmp, &follow)) > 0)
    {
      if ((count == 2 && isspace(follow)) || (count == 1))
      {
        a[i++] = tmp;
      }
      else
      {
        printf ("Bad character detected: %c\n", follow);
        break;
      }
    }

    i=0;

    while ((i < ARRAY_SIZE) && (count = scanf("%d%c", &tmp, &follow)) > 0)
    {
      if ((count == 2 && isspace(follow)) || (count == 1))
      {
        b[i++] = tmp;
      }
      else
      {
        printf ("Bad character detected: %c\n", follow);
        break;
      }
    }

    for(i = 0; i < ARRAY_SIZE ; i++)
        printf("%d ", a[i]);

    printf("\n");
    for(i = 0; i < ARRAY_SIZE ; i++)
        printf("%d ", b[i]);

    return 0;
}

尝试在使用 scanf 时尽可能地输入 看起来太费劲了,但需要让它变得强大,并且应对案例和错误。

scanf的更多问题是字符串或%s说明符。因此,在提供输入时,最好习惯于解析fgets,strtol和动态数组。