【发布时间】:2018-11-12 07:57:46
【问题描述】:
在用户完成输入字符串并提及每个字符串的最大长度和总数字符串后,我正在编写一个代码来打印存储在二维数组中的所有字符串(它最终将打印字符串以及行号) .问题是代码实际上将所有字符串存储在二维数组中,其中有一整行间距,即一整行空行。代码、预期输出和它给出的输出如下。
代码:
#include <stdio.h>
int main() {
char s[20][30];
int i, number_of_strings, length_of_string, j = 0;
scanf("%d %d", &number_of_strings, &length_of_string);
for (i = 0; i<number_of_strings; i++) {
while ((s[i][j++] = getchar()) != '\n' && j<length_of_string)
s[i][j] = '\0';
j = 0;
}
for (i = 0; i<number_of_strings; i++) {
printf("i= %d %s\n", i, s[i]);
}
return 0;
}
示例输入:
2 3
raj
jar
预期输出:
i= 0 raj
i= 1 jar
输出给予:
i= 0
i= 1 raj
i= 2
i= 3 jar
请纠正我在哪里做错了。
【问题讨论】:
-
第二次
int读取后,您是否意识到输入缓冲区中有换行符?你认为这对你的第一次循环迭代有什么影响? -
你需要吃掉
\n在你的下一次迭代中消耗它。 -
scanf("%d %d", &number_of_strings, &length_of_string);将\n的2 3\n留在缓冲区中,第一个getchar()读取它。 -
while ((s[i][j++] = getchar()) != '\n' && j<length_of_string) s[i][j] = '\0';==> 大小测试首先为(j + 1) <length_of_string -
@KaustavBhattacharjee
\n在您的缓冲区中。这就是问题所在。
标签: c multidimensional-array output