我的代码如下:
#include <stdio.h>
#define NEW_LINE 10
#define TAB 9
#define SPACE 32
int main() {
int c;
int counter1 = 0;
int counter2 = 0;
int word[10][10] = { { 0 } };
while ((c = getchar()) != EOF) {
if (c != TAB && c != NEW_LINE && c != SPACE) {
word[counter1][counter2] = c;
++counter2;
} else {
counter2 = 0;
++counter1;
}
}
for (int a = 0; a <= 9; ++a) {
printf("\n");
for (int b = 0; b <= 9; ++b) {
printf("%4d", word[a][b]);
}
}
return 0;
}
我试着让用户输入并保存出现的单词。我的想法是我首先得到字母并将它们保存到一个数组中,形成一个单词,然后将每个单词保存到数组中(形成2D数组)。问题是我只打印出第一个字符数组,其余的由于某种原因被忽略了。我是一个初学者在C编程,所以不要生气,如果有一些愚蠢的错误。
输出如下:
Hello World
87 111 114 108 100 0 0 0
2条答案
按热度按时间gojuced71#
为了解决程序不打印出整个数组的问题,我们需要确保程序没有在数组的边界之外写入。一种方法是根据字的数量和每个字的长度为数组动态分配内存。
kr98yfug2#
只要输入的分隔符不超过10个,并且单词都不超过10个字符,代码看起来就没问题。我得到我的笔记本电脑上的完整输出,只有一个最后的换行符应该输出良好的风格。
上传的快照不完整:第一行对应于第二个字
World
,但是它应该在末尾具有2个零,并且在图像的底部可以看到另一行的顶部像素。试着放大你的VS输出面板的大小。为了避免未定义的行为,你应该保护你的程序免受缓冲区溢出的影响,例如忽略2D数组之外的字符: