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

C 输出带空格字符的整数数组,c,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

我正在试着写一个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;    
}

还有更好的方法吗?

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

  • 如果在数组中获得的元素超过了可以容纳的数量,那么当数组已满时,将显示错误

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


我担心,在得到整数之前使用
scanf
是一种选择,但这不是一个好主意,而且
scanf
也不是一种简单的方法。

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

  • 如果在数组中获得的元素超过了可以容纳的数量,那么当数组已满时,将显示错误

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


恐怕,在得到整数之前使用
scanf
是一种选择,但这不是一个好主意,而且
scanf
不是一种简单的方法

#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;
}
  • 干净地编译
  • 遵循公理:每行只有一条语句,每条语句(最多)有一个变量声明
  • 始终缩进
  • 消除不必要的变量
  • 限制变量的范围
  • 执行所需的功能
  • 正确检查系统功能的错误指示
  • 记录包含每个头文件的原因
  • 给出有意义名称的所有“神奇”数字(通过#define语句)
  • 现在建议的守则是:

    #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;
    }
    
    #包括//scanf()、fprintf()、stderr、printf()
    #包括//退出(),退出失败
    #定义每个人的最大人数3
    内部主(空)
    {
    int alice[MAX_NUMS_PERSON]={0};
    int bob[MAX_NUMS_PERSON]={0};
    //爱丽丝进来
    对于(int i=0;i
    以下建议的代码:

    #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;
    }
    
  • 干净地编译
  • 遵循公理:每行只有一条语句,每条语句(最多)有一个变量声明
  • 始终缩进
  • 消除不必要的变量
  • 限制变量的范围
  • 执行所需的功能
  • 正确检查系统功能的错误指示
  • 记录包含每个头文件的原因
  • 给出有意义名称的所有“神奇”数字(通过#define语句)
  • 现在建议的守则是:

    #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;
    }
    
    #包括//scanf()、fprintf()、stderr、printf()
    #包括//退出(),退出失败
    #定义每个人的最大人数3
    内部主(空)
    {
    int alice[MAX_NUMS_PERSON]={0};
    int bob[MAX_NUMS_PERSON]={0};
    //爱丽丝进来
    对于(int i=0;i
    根据此答案更改了我的C程序

    #包括
    #包括
    #定义数组大小3
    #定义BOB_尺寸5
    #定义ALICE_尺寸4
    int main()
    {
    int-tmp,i=0;
    字符跟随;
    整数计数;
    inta[ALICE_SIZE]={0},b[BOB_SIZE]={0};
    if((ALICE_SIZE0)
    {
    if((计数=2&&isspace(follow))| |(计数=1))
    {
    a[i++]=tmp;
    }
    其他的
    {
    printf(“检测到错误字符:%c\n”,跟随);
    打破
    }
    }
    i=0;
    而((i0)
    {
    if((计数=2&&isspace(follow))| |(计数=1))
    {
    b[i++]=tmp;
    }
    其他的
    {
    printf(“检测到错误字符:%c\n”,跟随);
    打破
    }
    }
    对于(i=0;i
    使用scanf 看起来需要付出太多的努力,但要使其健壮,需要付出很多努力,并且