`
SaraWon
  • 浏览: 41756 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

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方法还有好多没有考虑的地方,不过在一般的读取应该是够用了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics