我试图用\ 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。
答案 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则为最大行数。