多行不定长数组的输入问题
目前 我正在做题 其中数据无法处理:
输入多行数字 每一行数字个数不等 但最多不超过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存储不行么
[解决办法]
使用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;
}