C读取多行不定数量整型数据到二维数组

C语言给我们提供了丰富的输入输出方法,但是当我们需要读取多行由空格和空行分割的数据,并且每行数据的数量不确定时,貌似没有直接可以用的方法。
例如,将以下数据读入一个二维数组:
4
0 -2 -7 0 9 2 -6 2
-4 1 -4 1 -1

8 0 -2

第一行是二维数组的维数,接下来的四行是按行的输入数据,其中包含一个空行,我们需要将这些数据读入到一个二维数组中,直接使用scanf,fscanf,sscanf都不行,下面采用的方法是fgets读取每行,然后再逐个数据解析的方法:



#include<stdio.h>
int main()
{
//variables definition
int a[101][101];
char str[2000];
int g=1,h=1,count=0,len,s,n,i;

scanf("%d",&n);

while(fgets(str,100,stdin)!=NULL)
{
i=0;
s=0;
while(str[i]!='\0')
i++;
len=i-2;
while(s<=len)
{
i=s;
while((str[s]<='9'&&str[s]>='0')||str[s]=='+'||str[s]=='-')
s++;
a[g][h]=atoi(str,i,s-1);
count++;
h++;
if(h>n)
{
h=1;
g++;
}
if(g>n)
break;
while(s<=len&&str[s]!='+'&&str[s]!='-'&&!(str[s]<='9'&&str[s]>='0'))
s++;
}
if(count>=n*n)
break;

}
}

int atoi(char* num,int s,int e)
{
int result=0,flag=0;
if(s>e||num==NULL)
{
printf("Error!\n");
return;
}
if(num[s]=='-')
flag=1;
if(num[s]=='+'||num[s]=='-')
s++;
while(s<=e)
{
if(num[s]<='9'&&num[s]>='0')
result=result*10+(num[s]-'0');
else
{
printf("Error!\n");
return;
}
s++;
}
if(flag)
result=result*(-1);
return result;
}


atoi方法还有好多没有考虑的地方,不过在一般的读取应该是够用了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值