首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

多行不定长数组的输入有关问题

2013-01-28 
多行不定长数组的输入问题目前 我正在做题 其中数据无法处理:输入多行数字 每一行数字个数不等 但最多不超

多行不定长数组的输入问题
目前 我正在做题 其中数据无法处理:
输入多行数字 每一行数字个数不等 但最多不超过20个
每一行在一个数组内,例:

4 1 2 3 4 5 6 7 8

5 9 8 7 6 5 4 3 2 1 11

5 1 2 3 4 5 6 7 8 9 10
就需要建立三个数组 每一行为一个数组
这个怎么处理
[解决办法]
有效率的做法是先指定可变数组的行和列,然后再一行行的给定数值,例如:
3 4
1 2 3 4
5 6 7 8
9 0 1 2
[解决办法]
while(i<3)
{
scanf("%d", &arr[i][j++]);
ch=getchar();
i+=ch=='\n';
j*=ch!='\n';
}
[解决办法]
每个数组定义到最大嘛! 20个啊、、
  多次获取stdin的输入 获取一次就把数据存到数字里面;
你可以直接使用scanf 这个函数是可以碰到回车就停止获取了!
[解决办法]
每一行数字个数不等 但最多不超过20个。 用vector存储不行么
[解决办法]

引用:
引用:每个数组定义到最大嘛! 20个啊、、
  多次获取stdin的输入 获取一次就把数据存到数字里面;
你可以直接使用scanf 这个函数是可以碰到回车就停止获取了!

引用:每一行数字个数不等 但最多不超过20个。 用vector存储不行么
两位大神能具体点吗 我才学C++……

 使用C语言还是C++ 写?
[解决办法]
//输入多行(最多100行)数字 每一行数字个数不等 但最多不超过20个
// 每一行在一个数组内,例:
// 4 1 2 3 4 5 6 7 8
// 5 9 8 7 6 5 4 3 2 1 11
// 5 1 2 3 4 5 6 7 8 9 10
// 就需要建立三个数组 每一行为一个数组
#include <stdio.h>
#define MAXC 300 //每行最长字符数
#define MAXL 100 //最多行数
#define MAXN 20  //每行最多项数
char ln[MAXC],*p;
int D[MAXL][MAXN];
int N[MAXL];
int i,n,L,v,k;
int main() {
    L=0;
    while (1) {
        printf("Input up to 20 numbers separated by space(enter to end,no number to exit):");
        fflush(stdout);
        rewind(stdin);
        fgets(ln,MAXC,stdin);
        if (ln[0]=='\n') break;
        i=0;
        p=ln;
        while (1) {
            k=sscanf(p,"%d%n",&v,&n);
            if (k==1) {
                D[L][i]=v;
                p+=n;
                i++;
                if (i>=MAXN) break;
            } else if (k==0) {
                p++;


            } else break;
        }
        N[L]=i;
        L++;
        if (L>=MAXL) break;
    }
    if (L>0) {
        for (i=0;i<L;i++) {
            for (k=0;k<N[i];k++) {
                printf("%d ",D[i][k]);
            }
            printf("\n");
        }
    }
    return 0;
}


[解决办法]
void GetVal(char *str,int arr[])
{
    int i =0;
    char tmp[20] = "\0";
    char *p = str;
    char *q = tmp;
    while(*p != '\0')
    {
        if(*p == 32 && strlen(tmp) > 0)
        {
            printf("tmp = %s\n",tmp);
            arr[i] = atoi(tmp);
            memset(tmp,0,20);
            i++;
            p++;
            q = tmp;
            continue;
        }
        *q++ = *p++;
        if( *p == '\0')
        {
             printf("tmp = %s\n",tmp);
             arr[i] = atoi(tmp);
        }
    }
}

int main()
{
    int arr[3][20]; //定义一个2维数组,也就是三个数组每个有20个元素
    for(int i = 0; i < 3; i++)
    {
        for(int j = 0;j <20 ;j++)
        {
            arr[i][j] = 0; //初始化数组为0
        }

    }
    char buf[1024] = "\0";
    for(int i =0;i < 3; i++)
    {
        gets(buf);
        printf("%s\n",buf);
        GetVal(buf,arr[i]);
    }


    printf("end\n");

    for(int i = 0; i < 3; i++)
    {
        for(int j = 0;j <20 ;j++)
        {
            printf("%d\t",arr[i][j]); //初始化数组为0
        }
        printf("\n");
    }

    return 0;
}

热点排行