C - 使用getchar填充2D数组

时间:2015-02-25 02:08:34

标签: c arrays

我试图用\ n作为分隔符来填充2D数组。这是用户输入:

S T E L B M T F E Y D E E P S R T C I A E E
N N E L I T R L B D E T A R E M U N E T Y L
N O I T A N I M I R C N I F L E S S E N T A
A U I D E W A R R A N T N U P R U S S E R P
P G S G E A L P A P B A N P S A S S N M E A
C O N S I T U T I O N D E E C W S O O H P D
S V W D E L A N E E J A M E S M A D I S O N
A E D E S N E G R J C U L T N O H L T I R A
A R C E R R T R E E S B O N E E I D N N P R
S N J U D I C I A L A S S E C O R P E U D I
S M R A R A E B W B E S S M E O A U V P E M
O E O I A I L N O U C D O D S S E N N I G R
L N I D G Y T R C O M P E N S A T I O N N D
D T O Z E H P Y N D R L E E A O H S C O I B
I T P S U E T G O L U Z M M R B E H P I R T
E O I E A R R S U U I B H A Y L L M S T F A
R I N R E E E F U T L V Q U A R T E R I N G
S I D B S R R D I Y E N I G M I A N A T I R
S Q I S E B S C N S P E E C H R O T A E Y N
D L C M I L I T I A F L R N C A T S S P S E
R U T E D Y L E B I L C O H M L E T E S Y Y
L S T R T E W Z L I O S A E N S A E I Y A L

这是我的代码:

  #include <stdlib.h>
  #include <stdio.h>
  #include <string.h>

  int findSize();

  char grid[50][50];
  int row = 0, col = 0, size;
  int x, y;
  char c;

  int main()
  {
      size = findSize();

      for(x = 0; x < size; x++)
      {
          while ((c = getchar()) != '\n')
          {
              if (!isspace(c))
              {
                  grid[row][col++] = c;
              }
          }
          row++;
      }

      for(x = 0; x < size; x++)
      {
          printf("%s\n", grid[x]);
      }
  }

  int findSize()
  {
      int counter = 0;
      while ((c = getchar()) != '\n')
      {
          if (!isspace(c))
          {
              grid[row][col++] = c;
              counter++;
          }
      }
      return counter;
  }

这是我的输出:

STELBMTFEYDEEPSRTCIAEENNELITRLBDETAREMUNETYL

IMIRCNIFLESSENTA


NPSASSNMEA


ISON



JUDICIALASSECORPEUDI


OUCDODSSENNIGR


AOHSCOIB


FA

我做错了什么?我打错了还是把它放到2D阵列上了?我精通java,但不是那么C。

2 个答案:

答案 0 :(得分:1)

findSize()中缺少行增量和列重置。在main中的行增量后,列重置丢失。

答案 1 :(得分:1)

使用getline可能更简单。这是一个例子

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main() {

    char *line = NULL;
    size_t size; 
    char grid[50][50]; 


    int sizeG = 0; 
    while (getline(&line, &size, stdin) != -1) {
        int s = strlen(line);
        line[s - 1] = '\0'; 
        strcpy(grid[sizeG++], line); 
    }

    for (int i = 0; i < sizeG; ++i) {
        printf("%s\n", grid[i]); 
    }
}

您在stream参数中使用stdin,因此程序会读取标准输入。 line[s - 1] = '\0'是因为getline包含\n字符,但不包含字符串结尾字符。

更新

此解决方案假设一行中的最大字符数为50,如果为50则为最大行数。